Started with double dispatch in ast eval.
Works nice