from int import :: Eval
:: Function = Function [Char] [[Char]] Expression
+:: TypeDef = TypeDef [Char] [[Char]] [([Char], [Type])]
:: Expression
= Lit Value
:: Value
= Int Int
| Bool Bool
- | Func (Expression -> Eval Value)
+ | ** infix 9 Expression Expression
+ | Lambda` [Char] Expression
+ | Builtin (Expression -> Eval Expression)
-instance toString Function, Expression, Value
+:: Type
+ = TVar [Char]
+ | TInt
+ | TBool
+ | TApp Type Type
+ | (-->) infixr 9 Type Type
+
+instance toString Function, Expression, Value, Type, TypeDef