rewriting eval to do data directed dispatch