definition module ast from Data.Either import :: Either from StdOverloaded import class toString from int import :: Eval :: Function = Function [Char] [[Char]] Expression :: TypeDef = TypeDef [Char] [[Char]] [([Char], [Type])] :: Expression = Lit Value | Var [Char] | App Expression Expression | Lambda [Char] Expression | Let [([Char], Expression)] Expression :: Value = Int Int | Bool Bool | ** infix 9 Expression Expression | Lambda` [Char] Expression | Builtin (Expression -> Eval Expression) :: Type = TVar [Char] | TInt | TBool | TApp Type Type | (-->) infixr 9 Type Type instance toString Function, Expression, Value, Type, TypeDef