sig
  type t =
      Var of int
    | Arrow of Type.t * Type.t
    | TCons of Strng.t * Type.t list
  type env = (CoreML.t * Type.t) St.t
  val var : int -> Type.t
  val arrow : Type.t -> Type.t -> Type.t
  val tcons : Strng.t -> Type.t list -> Type.t
  val tcons' : string -> Type.t list -> Type.t
  val bool : Type.t
  val int : Type.t
  val basic_env : (CoreML.t * Type.t) St.t
  val reduce_var_index : Type.t -> Type.t
  val is_unifiable : (Type.t * Type.t) St.t -> bool
  val check_type : (CoreML.t * Type.t) St.t -> CoreML.t -> Type.t -> bool
  val is_typable : (CoreML.t * Type.t) St.t -> CoreML.t -> bool
  val infer_type : (CoreML.t * Type.t) St.t -> CoreML.t -> Type.t
  val typep : Type.t Parser.t
  val to_strng : Type.t -> Strng.t
  val to_string : Type.t -> string
  val toplevel_printer : Format.formatter -> Type.t -> unit
end