sig
  exception TypingError of Positions.position
  exception UnboundIdentifier of Positions.position * string
  exception CannotGeneralize of Positions.position * Constraint.variable
  exception NonDistinctVariables of Positions.position *
              Constraint.variable list
  type environment
  type tconstraint =
      (Constraint.crterm, Constraint.variable) Constraint.type_constraint
  type solving_step =
      Init of MiniSolver.tconstraint
    | Solve of MiniSolver.tconstraint
    | Solved of MiniSolver.tconstraint
    | UnifyTerms of Constraint.crterm * Constraint.crterm
    | UnifyVars of Constraint.variable * Constraint.variable
    | Generalize of int * Constraint.variable list
  val solve :
    ?tracer:(MiniSolver.solving_step -> unit) ->
    MiniSolver.tconstraint -> MiniSolver.environment
  val environment_as_list :
    MiniSolver.environment -> (string * Constraint.variable) list
  val print_env :
    ?use_user_def:'->
    (Constraint.variable -> string) -> MiniSolver.environment -> unit
  val print_env_task : string
  val register_tasks : (Constraint.variable -> string) -> unit
end