sig
  type algebraic_datatype = (MiniAst.dname * MultiEquation.variable) list
  type type_info =
      MiniKindInferencer.t * MultiEquation.variable *
      MiniTypingEnvironment.algebraic_datatype option Pervasives.ref
  type data_constructor =
      int * MultiEquation.variable list * MultiEquation.crterm
  type environment
  val empty_environment : MiniTypingEnvironment.environment
  val fold_type_info :
    ('-> MiniAst.tname * MiniTypingEnvironment.type_info -> 'a) ->
    '-> MiniTypingEnvironment.environment -> 'a
  val add_type_variables :
    (MiniAst.tname * MiniTypingEnvironment.type_info) list ->
    MiniTypingEnvironment.environment -> MiniTypingEnvironment.environment
  val add_type_constructor :
    MiniTypingEnvironment.environment ->
    MiniAst.tname ->
    MiniTypingEnvironment.type_info -> MiniTypingEnvironment.environment
  val add_data_constructor :
    MiniTypingEnvironment.environment ->
    MiniAst.dname ->
    MiniTypingEnvironment.data_constructor ->
    MiniTypingEnvironment.environment
  val is_regular_datacon_scheme :
    MiniTypingEnvironment.environment ->
    MultiEquation.variable list -> MultiEquation.crterm -> bool
  val lookup_datacon :
    ?pos:Positions.position ->
    MiniTypingEnvironment.environment ->
    MiniAst.dname -> MiniTypingEnvironment.data_constructor
  val lookup_type_variable :
    ?pos:Positions.position ->
    MiniTypingEnvironment.environment ->
    MiniAst.tname -> MultiEquation.variable CoreAlgebra.arterm
  val typcon_kind :
    MiniTypingEnvironment.environment ->
    MiniAst.tname -> MiniKindInferencer.t
  val typcon_variable :
    MiniTypingEnvironment.environment ->
    MiniAst.tname -> MultiEquation.variable CoreAlgebra.arterm
  val as_fun :
    MiniTypingEnvironment.environment ->
    MiniAst.tname -> MultiEquation.variable CoreAlgebra.arterm
  val as_kind_env :
    MiniTypingEnvironment.environment ->
    (MiniAst.tname -> MiniKindInferencer.t) *
    (MiniAst.tname -> MiniKindInferencer.t -> unit)
  val fresh_datacon_scheme :
    Positions.position ->
    MiniTypingEnvironment.environment ->
    MiniAst.dname -> MultiEquation.variable list * MultiEquation.crterm
  val fresh_flexible_vars :
    Positions.position ->
    MiniTypingEnvironment.environment ->
    MiniAst.tname list ->
    MultiEquation.variable list *
    (MiniAst.tname * MiniTypingEnvironment.type_info) list
  val fresh_rigid_vars :
    Positions.position ->
    MiniTypingEnvironment.environment ->
    MiniAst.tname list ->
    MultiEquation.variable list *
    (MiniAst.tname * MiniTypingEnvironment.type_info) list
  val fresh_unnamed_rigid_vars :
    Positions.position ->
    MiniTypingEnvironment.environment ->
    'a list ->
    MultiEquation.variable list * ('a * MiniTypingEnvironment.type_info) list
  val add_type_and_kind_variables :
    (MiniAst.tname * MultiEquation.variable) list ->
    MiniTypingEnvironment.environment -> MiniTypingEnvironment.environment
end