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
- | Builtin [Char] [Expression]
- | Let [Char] [[Char]] Expression Expression
+ | Let [([Char], Expression)] Expression
:: Value
= Int Int
| Bool Bool
- | Func Int [Expression] ([Expression] -> Expression)
+ | ** infix 9 Expression Expression
+ | Lambda` [Char] Expression
+ | Builtin (Expression -> Eval Expression)
:: Type
= TVar [Char]
| TInt
| TBool
- | TFun Type Type
+ | TApp Type Type
+ | (-->) infixr 9 Type Type
-instance toString Function, Expression, Value, Type
+instance toString Function, Expression, Value, Type, TypeDef