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] | Let [Char] Expression :: Value = Int Int | Bool Bool | Func Int [Expression] ([Expression] -> Expression) :: Type = TVar [Char] | TInt | TBool | TFun Type Type instance toString AST, Function, Expression, Value, Type