from int import :: Eval
:: Function = Function [Char] [[Char]] Expression
+:: TypeDef = TypeDef [Char] [[Char]] [([Char], [Type])]
:: Expression
= Lit Value
| Var [Char]
- | Tuple Expression Expression
| App Expression Expression
| Lambda [Char] Expression
| Let [([Char], 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