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