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