sig
  type metavar = int * string
  type typ =
    Typeinf_syntax.Explicit.typ =
      TMetavar of Typeinf.Explicit.metavar
    | TInt
    | TBool
    | TFun of Typeinf.Explicit.typ * Typeinf.Explicit.typ
    | TPair of Typeinf.Explicit.typ * Typeinf.Explicit.typ
    | TList of Typeinf.Explicit.typ
  type exp =
    Typeinf_syntax.Explicit.exp =
      Const of Typeinf.const
    | Op2 of Typeinf.op2 * Typeinf.Explicit.exp * Typeinf.Explicit.exp
    | If of Typeinf.Explicit.exp * Typeinf.Explicit.exp *
        Typeinf.Explicit.exp
    | Id of Typeinf.id
    | Let of Typeinf.id * Typeinf.Explicit.exp * Typeinf.Explicit.exp
    | Fun of Typeinf.id * Typeinf.Explicit.typ * Typeinf.Explicit.exp
    | Fix of Typeinf.id * Typeinf.Explicit.typ * Typeinf.Explicit.exp
    | App of Typeinf.Explicit.exp * Typeinf.Explicit.exp
    | Empty of Typeinf.Explicit.typ
    | Cons of Typeinf.Explicit.exp * Typeinf.Explicit.exp
    | Head of Typeinf.Explicit.exp
    | Tail of Typeinf.Explicit.exp
    | IsEmpty of Typeinf.Explicit.exp
    | Pair of Typeinf.Explicit.exp * Typeinf.Explicit.exp
    | ProjL of Typeinf.Explicit.exp
    | ProjR of Typeinf.Explicit.exp
  val string_of_exp : Typeinf.Explicit.exp -> string
  val print_exp : Typeinf.Explicit.exp -> unit
  val string_of_typ : Typeinf.Explicit.typ -> string
  val print_typ : Typeinf.Explicit.typ -> unit
end