definition module ast from Data.Either import :: Either from StdOverloaded import class toString from int import :: Eval :: Function = Function [Char] [[Char]] Expression :: Expression = Lit Value | Var [Char] | App Expression Expression | Lambda [Char] Expression | Let [([Char], Expression)] Expression :: Value = Int Int | Bool Bool | Lambda` [Char] Expression | Builtin (Expression -> Eval Expression) instance toString Function, Expression, Value