package ocaml-base-compiler
module TypePairs : Hashtbl.S with type key = Types.type_expr * Types.type_expr
module Unification_trace : sig ... end
Unification traces are used to explain unification errors when printing error messages
exception Unify of Unification_trace.t
exception Tags of Asttypes.label * Asttypes.label
exception Subtype of Unification_trace.t * Unification_trace.t
val save_levels : unit -> levels
val set_levels : levels -> unit
val newty : Types.type_desc -> Types.type_expr
val newvar : ?name:string -> unit -> Types.type_expr
val newvar2 : ?name:string -> int -> Types.type_expr
val new_global_var : ?name:string -> unit -> Types.type_expr
val newobj : Types.type_expr -> Types.type_expr
val newconstr : Path.t -> Types.type_expr list -> Types.type_expr
val none : Types.type_expr
val repr : Types.type_expr -> Types.type_expr
val object_fields : Types.type_expr -> Types.type_expr
val flatten_fields :
Types.type_expr ->
(string * Types.field_kind * Types.type_expr) list * Types.type_expr
Transform a field type into a list of pairs label-type. The fields are sorted.
Beware of the interaction with GADTs:
Due to the introduction of object indexes for GADTs, the row variable of an object may now be an expansible type abbreviation. A first consequence is that flatten_fields
will not completely flatten the object, since the type abbreviation will not be expanded (flatten_fields
does not receive the current environment). Another consequence is that various functions may be called with the expansion of this type abbreviation, which is a Tfield, e.g. during printing.
Concrete problems have been fixed, but new bugs may appear in the future. (Test cases were added to typing-gadts/test.ml)
val associate_fields :
(string * Types.field_kind * Types.type_expr) list ->
(string * Types.field_kind * Types.type_expr) list ->
(string
* Types.field_kind
* Types.type_expr
* Types.field_kind
* Types.type_expr)
list
* (string * Types.field_kind * Types.type_expr) list
* (string * Types.field_kind * Types.type_expr) list
val opened_object : Types.type_expr -> bool
val close_object : Types.type_expr -> bool
val row_variable : Types.type_expr -> Types.type_expr
val set_object_name :
Ident.t ->
Types.type_expr ->
Types.type_expr list ->
Types.type_expr ->
unit
val remove_object_name : Types.type_expr -> unit
val hide_private_methods : Types.type_expr -> unit
val find_cltype_for_path :
Env.t ->
Path.t ->
Types.type_declaration * Types.type_expr
val sort_row_fields :
(Asttypes.label * Types.row_field) list ->
(Asttypes.label * Types.row_field) list
val merge_row_fields :
(Asttypes.label * Types.row_field) list ->
(Asttypes.label * Types.row_field) list ->
(Asttypes.label * Types.row_field) list
* (Asttypes.label * Types.row_field) list
* (Asttypes.label * Types.row_field * Types.row_field) list
val filter_row_fields :
bool ->
(Asttypes.label * Types.row_field) list ->
(Asttypes.label * Types.row_field) list
val generalize : Types.type_expr -> unit
val lower_contravariant : Env.t -> Types.type_expr -> unit
val generalize_structure : Types.type_expr -> unit
val generalize_spine : Types.type_expr -> unit
val correct_levels : Types.type_expr -> Types.type_expr
val limited_generalize : Types.type_expr -> Types.type_expr -> unit
val fully_generic : Types.type_expr -> bool
val check_scope_escape : Env.t -> int -> Types.type_expr -> unit
val instance : ?partial:bool -> Types.type_expr -> Types.type_expr
val generic_instance : Types.type_expr -> Types.type_expr
val instance_list : Types.type_expr list -> Types.type_expr list
val existential_name :
Types.constructor_description ->
Types.type_expr ->
string
val instance_constructor :
?in_pattern:(Env.t ref * int) ->
Types.constructor_description ->
Types.type_expr list * Types.type_expr
val instance_parameterized_type :
?keep_names:bool ->
Types.type_expr list ->
Types.type_expr ->
Types.type_expr list * Types.type_expr
val instance_parameterized_type_2 :
Types.type_expr list ->
Types.type_expr list ->
Types.type_expr ->
Types.type_expr list * Types.type_expr list * Types.type_expr
val instance_declaration : Types.type_declaration -> Types.type_declaration
val generic_instance_declaration :
Types.type_declaration ->
Types.type_declaration
val instance_class :
Types.type_expr list ->
Types.class_type ->
Types.type_expr list * Types.class_type
val instance_poly :
?keep_names:bool ->
bool ->
Types.type_expr list ->
Types.type_expr ->
Types.type_expr list * Types.type_expr
val polyfy :
Env.t ->
Types.type_expr ->
Types.type_expr list ->
Types.type_expr * bool
val instance_label :
bool ->
Types.label_description ->
Types.type_expr list * Types.type_expr * Types.type_expr
val apply :
Env.t ->
Types.type_expr list ->
Types.type_expr ->
Types.type_expr list ->
Types.type_expr
val expand_head_once : Env.t -> Types.type_expr -> Types.type_expr
val expand_head : Env.t -> Types.type_expr -> Types.type_expr
val try_expand_once_opt : Env.t -> Types.type_expr -> Types.type_expr
val expand_head_opt : Env.t -> Types.type_expr -> Types.type_expr
The compiler's own version of expand_head
necessary for type-based optimisations.
val full_expand : Env.t -> Types.type_expr -> Types.type_expr
val extract_concrete_typedecl :
Env.t ->
Types.type_expr ->
Path.t * Path.t * Types.type_declaration
val enforce_constraints : Env.t -> Types.type_expr -> unit
val unify : Env.t -> Types.type_expr -> Types.type_expr -> unit
val unify_gadt :
equations_level:int ->
allow_recursive:bool ->
Env.t ref ->
Types.type_expr ->
Types.type_expr ->
unit TypePairs.t
val unify_var : Env.t -> Types.type_expr -> Types.type_expr -> unit
val filter_arrow :
Env.t ->
Types.type_expr ->
Asttypes.arg_label ->
Types.type_expr * Types.type_expr
val filter_method :
Env.t ->
string ->
Asttypes.private_flag ->
Types.type_expr ->
Types.type_expr
val check_filter_method :
Env.t ->
string ->
Asttypes.private_flag ->
Types.type_expr ->
unit
val occur_in : Env.t -> Types.type_expr -> Types.type_expr -> bool
val deep_occur : Types.type_expr -> Types.type_expr -> bool
val filter_self_method :
Env.t ->
string ->
Asttypes.private_flag ->
(Ident.t * Types.type_expr) Types.Meths.t ref ->
Types.type_expr ->
Ident.t * Types.type_expr
val moregeneral : Env.t -> bool -> Types.type_expr -> Types.type_expr -> bool
val rigidify : Types.type_expr -> Types.type_expr list
val all_distinct_vars : Env.t -> Types.type_expr list -> bool
val matches : Env.t -> Types.type_expr -> Types.type_expr -> bool
val reify_univars : Env.t -> Types.type_expr -> Types.type_expr
type class_match_failure =
| CM_Virtual_class
| CM_Parameter_arity_mismatch of int * int
| CM_Type_parameter_mismatch of Env.t * Unification_trace.t
| CM_Class_type_mismatch of Env.t * Types.class_type * Types.class_type
| CM_Parameter_mismatch of Env.t * Unification_trace.t
| CM_Val_type_mismatch of string * Env.t * Unification_trace.t
| CM_Meth_type_mismatch of string * Env.t * Unification_trace.t
| CM_Non_mutable_value of string
| CM_Non_concrete_value of string
| CM_Missing_value of string
| CM_Missing_method of string
| CM_Hide_public of string
| CM_Hide_virtual of string * string
| CM_Public_method of string
| CM_Private_method of string
| CM_Virtual_method of string
val match_class_types :
?trace:bool ->
Env.t ->
Types.class_type ->
Types.class_type ->
class_match_failure list
val equal :
Env.t ->
bool ->
Types.type_expr list ->
Types.type_expr list ->
bool
val match_class_declarations :
Env.t ->
Types.type_expr list ->
Types.class_type ->
Types.type_expr list ->
Types.class_type ->
class_match_failure list
val enlarge_type : Env.t -> Types.type_expr -> Types.type_expr * bool
val subtype : Env.t -> Types.type_expr -> Types.type_expr -> unit -> unit
exception Nondep_cannot_erase of Ident.t
val nondep_type : Env.t -> Ident.t list -> Types.type_expr -> Types.type_expr
val nondep_type_decl :
Env.t ->
Ident.t list ->
bool ->
Types.type_declaration ->
Types.type_declaration
val nondep_extension_constructor :
Env.t ->
Ident.t list ->
Types.extension_constructor ->
Types.extension_constructor
val nondep_class_declaration :
Env.t ->
Ident.t list ->
Types.class_declaration ->
Types.class_declaration
val nondep_cltype_declaration :
Env.t ->
Ident.t list ->
Types.class_type_declaration ->
Types.class_type_declaration
val cyclic_abbrev : Env.t -> Ident.t -> Types.type_expr -> bool
val normalize_type : Types.type_expr -> unit
val closed_schema : Env.t -> Types.type_expr -> bool
val free_variables : ?env:Env.t -> Types.type_expr -> Types.type_expr list
val closed_type_decl : Types.type_declaration -> Types.type_expr option
val closed_extension_constructor :
Types.extension_constructor ->
Types.type_expr option
type closed_class_failure =
| CC_Method of Types.type_expr * bool * string * Types.type_expr
| CC_Value of Types.type_expr * bool * string * Types.type_expr
val closed_class :
Types.type_expr list ->
Types.class_signature ->
closed_class_failure option
val unalias : Types.type_expr -> Types.type_expr
val signature_of_class_type : Types.class_type -> Types.class_signature
val self_type : Types.class_type -> Types.type_expr
val class_type_arity : Types.class_type -> int
val arity : Types.type_expr -> int
val collapse_conj_params : Env.t -> Types.type_expr list -> unit
val wrap_trace_gadt_instances : Env.t -> ('a -> 'b) -> 'a -> 'b
val immediacy : Env.t -> Types.type_expr -> Type_immediacy.t
val maybe_pointer_type : Env.t -> Types.type_expr -> bool
val package_subtype :
(Env.t ->
Path.t ->
Longident.t list ->
Types.type_expr list ->
Path.t ->
Longident.t list ->
Types.type_expr list ->
bool)
ref
val mcomp : Env.t -> Types.type_expr -> Types.type_expr -> unit