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 | Func (Expression -> Eval Value) instance toString Function, Expression, Value