try letrec
[minfp.git] / ast.dcl
1 definition module ast
2
3 from Data.Either import :: Either
4 from StdOverloaded import class toString
5
6 :: Function = Function [Char] [[Char]] Expression
7 :: Expression
8 = Lit Value
9 | Var [Char]
10 | App Expression Expression
11 | Lambda [Char] Expression
12 | Builtin [Char] [Expression]
13 | Let [Char] [[Char]] Expression Expression
14
15 :: Value
16 = Int Int
17 | Bool Bool
18 | Func Int [Expression] ([Expression] -> Expression)
19
20 :: Type
21 = TVar [Char]
22 | TInt
23 | TBool
24 | TFun Type Type
25
26 instance toString Expression, Value, Type