sig
type id = Identifier.t
type arithOp = Plus | Minus | Times
type intCmp = LT | GT | EQ
module Implicit :
sig
type exp =
Int of int
| Bool of bool
| Arith of Typeinf_syntax.arithOp * Typeinf_syntax.Implicit.exp *
Typeinf_syntax.Implicit.exp
| Cmp of Typeinf_syntax.intCmp * Typeinf_syntax.Implicit.exp *
Typeinf_syntax.Implicit.exp
| If of Typeinf_syntax.Implicit.exp * Typeinf_syntax.Implicit.exp *
Typeinf_syntax.Implicit.exp
| Id of Typeinf_syntax.id
| Let of Typeinf_syntax.id * Typeinf_syntax.Implicit.exp *
Typeinf_syntax.Implicit.exp
| Fun of Typeinf_syntax.id * Typeinf_syntax.Implicit.exp
| Fix of Typeinf_syntax.id * Typeinf_syntax.Implicit.exp
| App of Typeinf_syntax.Implicit.exp * Typeinf_syntax.Implicit.exp
| Empty
| Cons of Typeinf_syntax.Implicit.exp * Typeinf_syntax.Implicit.exp
| Head of Typeinf_syntax.Implicit.exp
| Tail of Typeinf_syntax.Implicit.exp
| IsEmpty of Typeinf_syntax.Implicit.exp
| Pair of Typeinf_syntax.Implicit.exp * Typeinf_syntax.Implicit.exp
| ProjL of Typeinf_syntax.Implicit.exp
| ProjR of Typeinf_syntax.Implicit.exp
end
module Explicit :
sig
type typ =
TId of Typeinf_syntax.id
| TInt
| TBool
| TFun of Typeinf_syntax.Explicit.typ * Typeinf_syntax.Explicit.typ
| TPair of Typeinf_syntax.Explicit.typ * Typeinf_syntax.Explicit.typ
| TList of Typeinf_syntax.Explicit.typ
type exp =
Int of int
| Bool of bool
| Arith of Typeinf_syntax.arithOp * Typeinf_syntax.Explicit.exp *
Typeinf_syntax.Explicit.exp
| Cmp of Typeinf_syntax.intCmp * Typeinf_syntax.Explicit.exp *
Typeinf_syntax.Explicit.exp
| If of Typeinf_syntax.Explicit.exp * Typeinf_syntax.Explicit.exp *
Typeinf_syntax.Explicit.exp
| Id of Typeinf_syntax.id
| Let of Typeinf_syntax.id * Typeinf_syntax.Explicit.exp *
Typeinf_syntax.Explicit.exp
| Fun of Typeinf_syntax.id * Typeinf_syntax.Explicit.typ *
Typeinf_syntax.Explicit.exp
| Fix of Typeinf_syntax.id * Typeinf_syntax.Explicit.typ *
Typeinf_syntax.Explicit.exp
| App of Typeinf_syntax.Explicit.exp * Typeinf_syntax.Explicit.exp
| Empty of Typeinf_syntax.Explicit.typ
| Cons of Typeinf_syntax.Explicit.exp * Typeinf_syntax.Explicit.exp
| Head of Typeinf_syntax.Explicit.exp
| Tail of Typeinf_syntax.Explicit.exp
| IsEmpty of Typeinf_syntax.Explicit.exp
| Pair of Typeinf_syntax.Explicit.exp * Typeinf_syntax.Explicit.exp
| ProjL of Typeinf_syntax.Explicit.exp
| ProjR of Typeinf_syntax.Explicit.exp
end
end