To focus the search input from anywhere on the page, press the 'S' key.
in-package search v0.1.0
-
bigarray
-
dynlink
-
ocamlbytecomp
-
ocamlcommon
-
ocamlmiddleend
-
ocamloptcomp
-
odoc_info
-
stdlib
-
str
-
unix
Library
Module
Module type
Parameter
Class
Class type
exception Unify of Errortrace.unification_error
exception Equality of Errortrace.equality_error
exception Moregen of Errortrace.moregen_error
exception Subtype of Errortrace.Subtype.error
exception Escape of Types.type_expr Errortrace.escape
exception Tags of Asttypes.label * Asttypes.label
exception Matches_failure of Env.t * Errortrace.unification_error
val save_levels : unit -> levels
val set_levels : levels -> unit
val newty : Types.type_desc -> Types.type_expr
val new_scoped_ty : int -> 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 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 set_object_name :
Ident.t ->
Types.type_expr list ->
Types.type_expr ->
unit
val remove_object_name : 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 lower_variables_only : Env.t -> int -> Types.type_expr -> unit
val generalize_structure : Types.type_expr -> unit
val generalize_class_type : Types.class_type -> unit
val generalize_class_type_structure : Types.class_type -> unit
val generalize_class_signature_spine : Env.t -> Types.class_signature -> unit
val correct_levels : Types.type_expr -> Types.type_expr
val limited_generalize : Types.type_expr -> Types.type_expr -> unit
val limited_generalize_class_type : Types.type_expr -> Types.class_type -> 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 new_local_type :
?loc:Location.t ->
?manifest_and_scope:(Types.type_expr * int) ->
unit ->
Types.type_declaration
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 * Types.type_expr list
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 try_expand_once_opt : Env.t -> Types.type_expr -> Types.type_expr
val try_expand_safe_opt : Env.t -> Types.type_expr -> 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 expand_head_opt : Env.t -> Types.type_expr -> Types.type_expr
The compiler's own version of expand_head
necessary for type-based optimisations.
Expansion of types for error traces; lives here instead of in Errortrace
because the expansion machinery lives here.
val expanded_diff :
Env.t ->
got:Types.type_expr ->
expected:Types.type_expr ->
(Errortrace.expanded_type, 'variant) Errortrace.elt
Create an Errortrace.Diff
by expanding the two types
val unexpanded_diff :
got:Types.type_expr ->
expected:Types.type_expr ->
(Errortrace.expanded_type, 'variant) Errortrace.elt
Create an Errortrace.Diff
by *duplicating* the two types, so that each one's expansion is identical to itself. Despite the name, does create Errortrace.expanded_type
s.
val full_expand :
may_forget_scope:bool ->
Env.t ->
Types.type_expr ->
Types.type_expr
type typedecl_extraction_result =
| Typedecl of Path.t * Path.t * Types.type_declaration
| Has_no_typedecl
| May_have_typedecl