Ocaml_typing.Mode_hintA description of what type of item is being closed over
type ident = {category : lock_item;lid : Ocaml_parsing.Longident.t;Sometimes we want the ident to represent M.x but the loc can only point to M. This field would store M.x.
}type pinpoint_desc = | Unknown| Ident of identAn identifier
*)| FunctionA function definition
*)| FunctorA functor definition
*)| LazyA lazy expression
*)| AllocationAn allocation
*)| ExpressionAn arbitrary expression
*)| ClassAn class declaration
*)| ObjectAn object declaration
*)| Loopa loop
*)| Letoplet op
*)| Cases_resultthe result of cases
*)Description of pinpoints to accompany the location. The constructors are not mutually exclusive - some might be more precise than others
type pinpoint = Ocaml_parsing.Location.t * pinpoint_descA pinpoint is a location in the source code, accompanied by additional description
type 'd const = | Unknown : ('l * 'r) constThe constant bound is not explained.
*)| Lazy_allocated_on_heap : (Allowance.disallowed * 'r) Allowance.pos const| Class_legacy_monadic : ('l * Allowance.disallowed) Allowance.neg const| Class_legacy_comonadic : ('l * Allowance.disallowed) Allowance.pos const| Tailcall_function : (Allowance.disallowed * 'r) Allowance.pos const| Tailcall_argument : (Allowance.disallowed * 'r) Allowance.pos const| Mutable_read : mutable_part -> (Allowance.disallowed * 'r) Allowance.neg const| Mutable_write : mutable_part -> (Allowance.disallowed * 'r) Allowance.neg const| Lazy_forced : (Allowance.disallowed * 'r) Allowance.neg const| Function_return : (Allowance.disallowed * 'r) Allowance.pos const| Stack_expression : ('l * Allowance.disallowed) Allowance.pos const| Module_allocated_on_heap : (Allowance.disallowed * 'r) Allowance.pos const| Always_dynamic : always_dynamic -> ('l * Allowance.disallowed) Allowance.neg
const| Branching : ('l * Allowance.disallowed) Allowance.neg const| Is_used_in : pinpoint -> (Allowance.disallowed * 'r) constA variant of Is_closed_by where the closure mode is constant. INVARIANT: The pinpoint cannot be Unknown.
constraint 'd = _ * _Hint for a constant bound. See Mode.Report.print_const for what each non-trivial constructor means.
type allocation = allocation_desc Ocaml_parsing.Location.loctype 'd morph = | Unknown : ('l * 'r) morphThe morphism is not explained.
*)| Unknown_non_rigid : ('l * 'r) morphSimiliar to Unknown, but in the special case where the morph doesn't change the bound, it can be skipped.
| Skip : ('l * 'r) morphThe morphism doesn't change the bound and should be skipped in printing.
*)| Close_over : ('d, 'l * Allowance.disallowed) polarity
* closure_details -> ('l * Allowance.disallowed) morph| Is_closed_by : ('d, Allowance.disallowed * 'r) polarity
* closure_details -> (Allowance.disallowed * 'r) morph| Captured_by_partial_application : (Allowance.disallowed * 'r) morph| Adj_captured_by_partial_application : ('l * Allowance.disallowed) morph| Crossing : ('l * 'r) morph| Allocation_r : allocation -> (Allowance.disallowed * 'r) morph| Allocation_l : allocation -> ('l * Allowance.disallowed) morph| Contains_l : ('l * Allowance.disallowed, 'd) polarity * contains -> 'd morph| Is_contained_by : ('l * 'r, 'd) polarity * is_contained_by -> 'd morph| Contains_r : (Allowance.disallowed * 'r, 'd) polarity * contains -> 'd morph constraint 'd = _ * _Hint for morphisms. When acompanied by a destination pinpoint, morph gives a source pinpoint and explains the relation between them. See Mode.Report.print_morph for what each non-trivial constructor means.