Simplify interact

Delegate more responsibility to eval