sig
  val extract_type : MiniAst.expression -> MiniAst.typ * MiniAst.expression
  type recursive_value_definition_kind =
      Implicit of MiniAst.name * MiniAst.expression
    | Explicit of MiniAst.name * MiniAst.typ * MiniAst.expression
    | NotPVar
  val explicit_or_implicit :
    MiniAst.pattern ->
    MiniAst.expression -> MiniTypes.recursive_value_definition_kind
  val variables_of_typ : MiniAst.typ -> Misc.StringSet.t
  val arrow :
    MiniTypingEnvironment.environment ->
    Constraint.variable CoreAlgebra.arterm ->
    Constraint.variable CoreAlgebra.arterm ->
    Constraint.variable CoreAlgebra.arterm
  val arity : MiniAst.typ -> int
  val tycon :
    MiniTypingEnvironment.environment ->
    MultiEquation.tname ->
    Constraint.variable CoreAlgebra.arterm list ->
    Constraint.variable CoreAlgebra.arterm
  val intern :
    Positions.position ->
    MiniTypingEnvironment.environment -> MiniAst.typ -> Constraint.crterm
  val intern_let_env :
    Positions.position ->
    MiniTypingEnvironment.environment ->
    MultiEquation.tname list ->
    MultiEquation.tname list ->
    Constraint.variable list * Constraint.variable list *
    MiniTypingEnvironment.environment
  val intern_scheme :
    Positions.position ->
    MiniTypingEnvironment.environment ->
    string ->
    MultiEquation.tname list ->
    MiniAst.typ -> (Constraint.crterm, Constraint.variable) Constraint.scheme
end