sig
type id = string
type field = string
type arithOp = Plus | Minus | Times
type intCmp = LT | GT | EQ
type typ =
TNum
| TBool
| TFun of Typed_syntax.typ * Typed_syntax.typ
| TPair of Typed_syntax.typ * Typed_syntax.typ
| TList of Typed_syntax.typ
type exp =
Int of int
| Bool of bool
| Arith of Typed_syntax.arithOp * Typed_syntax.exp * Typed_syntax.exp
| Cmp of Typed_syntax.intCmp * Typed_syntax.exp * Typed_syntax.exp
| If of Typed_syntax.exp * Typed_syntax.exp * Typed_syntax.exp
| Id of Typed_syntax.id
| Let of Typed_syntax.id * Typed_syntax.exp * Typed_syntax.exp
| Fun of Typed_syntax.id * Typed_syntax.typ * Typed_syntax.exp
| Fix of Typed_syntax.id * Typed_syntax.typ * Typed_syntax.exp
| App of Typed_syntax.exp * Typed_syntax.exp
| Empty of Typed_syntax.typ
| Cons of Typed_syntax.exp * Typed_syntax.exp
| Head of Typed_syntax.exp
| Tail of Typed_syntax.exp
| IsEmpty of Typed_syntax.exp
| Pair of Typed_syntax.exp * Typed_syntax.exp
| ProjL of Typed_syntax.exp
| ProjR of Typed_syntax.exp
end