sig
  type 'a or_error = ('a, string) CCResult.t
  type id = Nunchaku_core.ID.t
  type 'a var = 'Nunchaku_core.Var.t
  type loc = Nunchaku_core.Location.t
  exception ScopingError of string * string * TypeInference.loc option
  type attempt_stack = Nunchaku_core.UntypedAST.term list
  exception TypeError of string * TypeInference.attempt_stack
  module Convert :
    functor (T : Nunchaku_core.TermTyped.S->
      sig
        type term = T.t
        type env
        val empty_env : TypeInference.Convert.env
        val convert_ty :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.ty ->
          TypeInference.Convert.term TypeInference.or_error
        val convert_ty_exn :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.ty -> TypeInference.Convert.term
        val convert_term :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.term ->
          TypeInference.Convert.term TypeInference.or_error
        val convert_term_exn :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.term -> TypeInference.Convert.term
        val generalize :
          close:[ `Forall | `Fun | `NoClose ] ->
          TypeInference.Convert.term ->
          TypeInference.Convert.term *
          TypeInference.Convert.term TypeInference.var list
        type statement =
            (TypeInference.Convert.term, TypeInference.Convert.term)
            Nunchaku_core.Statement.t
        val convert_statement :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.statement ->
          (TypeInference.Convert.statement * TypeInference.Convert.env)
          TypeInference.or_error
        val convert_statement_exn :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.statement ->
          TypeInference.Convert.statement * TypeInference.Convert.env
        type problem =
            (TypeInference.Convert.term, TypeInference.Convert.term)
            Nunchaku_core.Problem.t
        val convert_problem :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.statement CCVector.ro_vector ->
          (TypeInference.Convert.problem * TypeInference.Convert.env)
          TypeInference.or_error
        val convert_problem_exn :
          env:TypeInference.Convert.env ->
          Nunchaku_core.UntypedAST.statement CCVector.ro_vector ->
          TypeInference.Convert.problem * TypeInference.Convert.env
      end
  module Make :
    functor
      (T1 : Nunchaku_core.TermTyped.S) (T2 : Nunchaku_core.TermInner.S->
      sig
        type term1 = T1.t
        type term2 = T2.t
        val pipe :
          print:bool ->
          (Nunchaku_core.UntypedAST.statement CCVector.ro_vector,
           (TypeInference.Make.term1, TypeInference.Make.term1)
           Nunchaku_core.Problem.t, 'a, 'a)
          Nunchaku_core.Transform.t
        val pipe_with :
          decode:('-> 'd) ->
          print:bool ->
          (Nunchaku_core.UntypedAST.statement CCVector.ro_vector,
           (TypeInference.Make.term1, TypeInference.Make.term1)
           Nunchaku_core.Problem.t, 'c, 'd)
          Nunchaku_core.Transform.t
      end
end