case class and visitor rep
switch eval to abstract ir