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