type t =
| Unit
| Bool
| Float
| Char
| String
| Int of int option
| List of t
| Array of t
| Tuple of t list
| Dict of [ `O | `R ] * (string * [ `RO | `RW ] * t) list
| Sum of [ `N | `P ] * (string * t list) list
| Option of t
| Rec of string * t
| Var of string
| Arrow of t * t
| Ext of string * t
val is_mutable : t -> bool
val free_vars : t -> string list
val foreigns : t -> string list
val unroll : (string * t) list -> t -> t
val is_subtype_of : t -> t -> bool
val (<:) : t -> t -> bool
val string_of_last_type_error : unit -> string
val to_string : t -> string
exception Parse_error of string
val of_string : string -> t