sig
type id = Identifier.t
type binOp = Plus | Minus | Times | LT | GT | EQ
type typ =
TInt
| TBool
| TFun of M_syntax.typ * M_syntax.typ
| TTuple of M_syntax.typ list
| TList of M_syntax.typ
type exp =
Int of int
| Bool of bool
| BinOp of M_syntax.binOp * M_syntax.exp * M_syntax.exp
| If of M_syntax.exp * M_syntax.exp * M_syntax.exp
| Id of M_syntax.id
| Let of M_syntax.id * M_syntax.exp * M_syntax.exp
| Fun of M_syntax.id * M_syntax.typ * M_syntax.exp
| Fix of M_syntax.id * M_syntax.typ * M_syntax.exp
| App of M_syntax.exp * M_syntax.exp
| Empty of M_syntax.typ
| Cons of M_syntax.exp * M_syntax.exp
| Head of M_syntax.exp
| Tail of M_syntax.exp
| IsEmpty of M_syntax.exp
| Tuple of M_syntax.exp list
| Proj of M_syntax.exp * int
| Read of M_syntax.typ
| Write of M_syntax.exp
end