package refl

  1. Overview
  2. Docs
type ('a, 'b) eq =
  1. | Eq : ('a, 'a) eq
type ('a, 'b, 'c) builtin_desc =
  1. | Bool : (bool, [ `Bool ], [> `Bool ]) builtin_desc
  2. | Bytes : (bytes, [ `Bytes ], [> `Bytes ]) builtin_desc
  3. | Char : (char, [ `Char ], [> `Char ]) builtin_desc
  4. | Float : (float, [ `Float ], [> `Float ]) builtin_desc
  5. | Int : (int, [ `Int ], [> `Int ]) builtin_desc
  6. | Int32 : (int32, [ `Int32 ], [> `Int32 ]) builtin_desc
  7. | Int64 : (int64, [ `Int64 ], [> `Int64 ]) builtin_desc
  8. | Nativeint : (nativeint, [ `Nativeint ], [> `Nativeint ]) builtin_desc
  9. | String : (string, [ `String ], [> `String ]) builtin_desc
type ('index, 'items, 'value, 'tail) selection =
  1. | Start : ([ `Zero ], 'sequence, _, 'sequence) selection
  2. | Next : ('index, 'sequence, _, 'head * 'tail) selection -> ([ `Succ of 'index ], 'sequence, 'head, 'tail) selection
type ('index, 'items, 'value, 'tail) binary_selection =
  1. | BinaryStart : ([ `Start ], 'sequence, _, 'sequence) binary_selection
  2. | Zero : ('index, 'sequence, _, 'zero * 'one) binary_selection -> ([ `Zero of 'index ], 'sequence, _, 'zero) binary_selection
  3. | One : ('index, 'sequence, _, 'zero * 'one) binary_selection -> ([ `One of 'index ], 'sequence, _, 'one) binary_selection
  4. | Select : ('index, 'sequence, _, 'contents ref) binary_selection -> ([ `Select of 'index ], 'sequence, 'contents, unit) binary_selection
type 'cases choice =
  1. | CFirst : 'types -> ('types * _) choice
  2. | CNext : 'cases choice -> (_ * 'cases) choice
type 'cases binary_choice =
  1. | CEnd : 'types -> 'types ref binary_choice
  2. | CZero : 'cases binary_choice -> ('cases * _) binary_choice
  3. | COne : 'cases binary_choice -> (_ * 'cases) binary_choice
module type UnaryTypeS = sig ... end
module Sequence (T : UnaryTypeS) : sig ... end
module Delay : sig ... end
module Delays : sig ... end
type ('index, 'arity, 'a, 'positive, 'direct) variable =
  1. | VFirst : ([ `Zero ], 'value * _, 'value, [ `Present ] * _, [ `Present ] * _) variable
  2. | VNext : ('index, 'sequence, 'value, 'positive, 'direct) variable -> ([ `Succ of 'index ], _ * 'sequence, 'value, _ * 'positive, _ * 'direct) variable
type ('count, 'types) length =
  1. | Zero : ([ `Zero ], unit) length
  2. | Succ : ('length, 'types) length -> ([ `Succ of 'length ], _ * 'types) length
type ('a, 'b, 'c) append =
  1. | Nil : (unit, 'a, 'a) append
  2. | Add : ('a, 'b, 'c) append -> ('head * 'a, 'b, 'head * 'c) append
type ('global, 'local) presence =
  1. | Present : ([> `Present ], [ `Present ]) presence
  2. | Absent : (_, [ `Absent ]) presence
type ('presence, 'directs) presences =
  1. | Presences : (_, unit) presences
  2. | AddPresent : ('presence, 'directs) presences -> ([> `Present ] as 'presence, [ `Present ] * 'directs) presences
  3. | AddAbsent : ('presence, 'directs) presences -> ('presence, [ `Absent ] * 'directs) presences
type ('constraints, 'exists) gadt_constraints = ..
type gadt_constraints +=
  1. | NoConstraints
type ('gadt, 'sub_gadt) sub_gadt_ext = ..
type ('gadt, 'sub_gadt) sub_gadt = {
  1. sub_gadt_ext : ('gadt, 'sub_gadt) sub_gadt_ext;
  2. sub_gadt_functional : 'gadt 'sub_gadt0 'sub_gadt1. ('gadt, 'sub_gadt0) sub_gadt_ext -> ('gadt, 'sub_gadt1) sub_gadt_ext -> ('sub_gadt0, 'sub_gadt1) eq;
}
type ('count, 'local, 'positive, 'negative, 'direct, 'positives, 'negatives, 'directs, 'subpositive, 'subnegative, 'subdirect) subvariables = {
  1. presences : ('local, 'directs) presences;
  2. positive_count : ('count, 'positives) length;
  3. positive : ('positives, 'positive, 'subpositive) append;
  4. negative_count : ('count, 'negatives) length;
  5. negative : ('negatives, 'negative, 'subnegative) append;
  6. direct_count : ('count, 'directs) length;
  7. direct : ('directs, 'direct, 'subdirect) append;
}
module Kinds : sig ... end
type ('a, 'arity, 'attribute) typed_attribute_kind = ..
type _ refl = ..
type ('source, 'sub, 'arg) transfer_argument =
  1. | Transfer : ('a, 'a, [ `Present ]) transfer_argument
  2. | Skip : (_, _, [ `Absent ]) transfer_argument
type ('source, 'sub, 'arg) transfer_arguments =
  1. | VTANil : (unit, _, unit) transfer_arguments
  2. | VTACons : {
    1. head : ('source, 'sub, 'arg) transfer_argument;
    2. tail : ('sources, 'sub, 'args) transfer_arguments;
    } -> ('source * 'sources, 'sub, 'arg * 'args) transfer_arguments
type ('p, 'n, 'sp, 'sn, 'ap, 'an) transfer_matrix = {
  1. pp : ('p, 'sp, 'ap) transfer_arguments;
  2. pn : ('p, 'sn, 'an) transfer_arguments;
  3. np : ('n, 'sp, 'an) transfer_arguments;
  4. nn : ('n, 'sn, 'ap) transfer_arguments;
}
type ('positive, 'negative, 'direct, 'subpositive, 'subnegative, 'subdirect, 'variables) transfer =
  1. | VTNil : (_, _, _, unit, unit, unit, unit) transfer
  2. | VTCons : {
    1. head : ('p, 'n, 'sp, 'sn, 'ap, 'an) transfer_matrix * ('d, 'sd, 'ad) transfer_arguments;
    2. tail : ('p, 'n, 'd, 'sps, 'sns, 'sds, 'variables) transfer;
    } -> ('p, 'n, 'd, 'sp * 'sps, 'sn * 'sns, 'sd * 'sds, ('ap * 'an * 'ad) * 'variables) transfer
type ('a, 'b) skip =
  1. | VKeep : ('a, 'a) skip
  2. | VSkip : ('a, [ `Absent ]) skip
type ('variables, 'skip_variables) skip_vector =
  1. | SKNil : (unit, unit) skip_vector
  2. | SKCons : {
    1. head : unit -> ('hd, 'skip_hd) skip;
    2. tail : ('a, 'b) skip_vector;
    } -> ('hd * 'a, 'skip_hd * 'b) skip_vector
type ('positive, 'negative, 'direct, 'skip_positive, 'skip_negative, 'skip_direct, 'variables) transfer_skip =
  1. | Transfer_skip : {
    1. transfer_vector : ('positive, 'negative, 'direct, 'subpositive, 'subnegative, 'subdirect, 'variables) transfer;
    2. skip_positive : ('subpositive, 'skip_positive) skip_vector;
    3. skip_negative : ('subnegative, 'skip_negative) skip_vector;
    4. skip_direct : ('subdirect, 'skip_direct) skip_vector;
    } -> ('positive, 'negative, 'direct, 'skip_positive, 'skip_negative, 'skip_direct, 'variables) transfer_skip
type ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc =
  1. | Variable : ('index, 'arity, 'a, 'positive, 'direct) variable -> ('a, [ `Variable of 'index ], 'arity, 'rec_group, [> `Variable ], 'positive, _, 'direct, _) desc
  2. | Builtin : ('a, 'structure, 'kinds) builtin_desc -> ('a, [ `Builtin of 'structure ], 'arity, 'rec_group, 'kinds, _, _, _, _) desc
  3. | Array : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'negative, 'positive, 'negative, 'gadt) desc -> ('a array, [ `Array of 'structure ], 'arity, 'rec_group, [> `Array ] as 'kinds, 'negative, 'positive, 'negative, 'gadt) desc
  4. | Arrow : {
    1. parameter : ('a, 'a_structure, 'arity, 'rec_group, 'kinds, 'negative, 'positive, 'negative, 'gadt) desc;
    2. result : ('b, 'b_structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'positive, 'gadt) desc;
    } -> ('a -> 'b, [ `Arrow of 'a_structure -> 'b_structure ], 'arity, 'rec_group, [> `Arrow ] as 'kinds, 'positive, 'negative, _, 'gadt) desc
  5. | LabelledArrow : {
    1. label : string;
    2. optional : bool;
    3. parameter : ('a, 'a_structure, 'arity, 'rec_group, 'kinds, 'negative, 'positive, 'negative, 'gadt) desc;
    4. result : ('b, 'b_structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'positive, 'gadt) desc;
    5. wrap : ('a -> 'b) -> 'arrow;
    6. unwrap : 'arrow -> 'a -> 'b;
    } -> ('arrow, [ `LabelledArrow of 'a_structure -> 'b_structure ], 'arity, 'rec_group, [> `Arrow ] as 'kinds, 'positive, 'negative, _, 'gadt) desc
  6. | Constr : {
    1. constructors : ('cases, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructors;
    2. construct : 'cases binary_choice -> 'a;
    3. destruct : 'a -> 'cases binary_choice;
    } -> ('a, [ `Constr of 'structures ], 'arity, 'rec_group, [> `Constr ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  7. | Variant : {
    1. constructors : ((_ * _) as 'cases, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructors;
    2. construct : 'cases choice -> 'a;
    3. destruct : 'a -> 'cases choice;
    } -> ('a, [ `Variant of 'structures ], 'arity, 'rec_group, [> `Variant ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  8. | Tuple : {
    1. structure : ((_ * (_ * _)) as 'types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) tuple_structure;
    2. construct : 'types -> 'a;
    3. destruct : 'a -> 'types;
    } -> ('a, [ `Tuple of 'structures ], 'arity, 'rec_group, [> `Tuple ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  9. | Record : {
    1. structure : ((_ * _) as 'types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_structure;
    2. construct : 'types -> 'a;
    3. destruct : 'a -> 'types;
    } -> ('a, [ `Record of 'structures ], 'arity, 'rec_group, [> `Record ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  10. | Object : {
    1. methods : ('methods, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_methods;
    2. construct : 'methods Delays.t -> 'a;
    3. destruct : 'a -> 'methods Delays.t;
    } -> (< .. > as 'a, [ `Object of 'structures ], 'arity, 'rec_group, [> `Object ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  11. | Lazy : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc -> ('a Lazy.t, [ `Lazy of 'structure ], 'arity, 'rec_group, [> `Lazy ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  12. | Apply : {
    1. arguments : ('types, 'structures, 'arity, 'rec_group, 'kinds, 'variables, 'gadt) vector;
    2. desc : ('a, 'structure, 'types, 'rec_group, 'kinds, 'subpositive, 'subnegative, 'subdirect, 'gadt) desc;
    3. transfer : ('positive, 'negative, 'direct, 'subpositive, 'subnegative, 'subdirect, 'variables) transfer_skip;
    } -> ('a, [ `Apply of 'structure * 'structures * 'subpositive * 'subnegative * 'subdirect * 'variables ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  13. | MapOpaque : {
    1. desc : ('a, 'structure, 'arity, 'rec_group, Kinds.all, 'positive, 'negative, 'direct, 'gadt) desc;
    } -> ('a, [ `MapOpaque of 'structure * 'direct ], 'arity, 'rec_group, [> `MapOpaque ], 'positive, 'negative, _, 'gadt) desc
  14. | Opaque : ([ `Succ of 'index ], 'gadt, 'a, _) selection -> ('a, [ `Opaque of 'index ], 'arity, 'rec_group, [> `Opaque ], 'positive, 'negative, _, 'gadt) desc
  15. | Rec : {
    1. index : ([ `Select of 'index ], 'rec_group, 'length * 'structure, _) binary_selection;
    2. desc : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    } -> ('a, [ `Rec of 'index ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  16. | RecGroup : {
    1. desc : ('a, 'structure, 'arity, 'new_rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    } -> ('a, [ `RecGroup of 'structure * 'new_rec_group ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  17. | SelectGADT : {
    1. index : ([ `Succ of 'index ], 'gadt, 'sub_gadt, _) selection;
    2. desc : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'sub_gadt) desc;
    } -> ('a, [ `SelectGADT of 'structure * 'index ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  18. | SubGADT : {
    1. sub_gadt : ('gadt, 'sub_gadt) sub_gadt;
    2. desc : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'sub_gadt) desc;
    } -> ('a, [ `SubGADT of 'structure ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  19. | Attributes : {
    1. attributes : ('a, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) attributes;
    2. desc : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    } -> ('a, [ `Attributes of 'structure ], 'arity, 'rec_group, [> `Attributes ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) desc
  20. | Name : {
    1. name : string;
    2. refl : 'a refl;
    3. desc : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'sub_gadt) desc;
    } -> ('a, [ `Name of 'structure ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'sub_gadt) desc
and ('cases, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructors =
  1. | CLeaf : ('types_and_eqs, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor -> ('types_and_eqs ref, 'structure ref, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructors
  2. | CNode : {
    1. zero : ('cases0, 'structures0, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructors;
    2. one : ('cases1, 'structures1, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructors;
    } -> ('cases0 * 'cases1, 'structures0 * 'structures1, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructors
and ('types_and_eqs, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor =
  1. | Constructor : {
    1. name : string;
    2. kind : ('types, 'structure_types, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor_kind;
    3. eqs : ('eqs, 'structure_eqs, 'kinds, 'gadt) constructor_eqs;
    4. attributes : ('types, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) attributes;
    } -> ('types * 'eqs, [ `Constructor of 'structure_types * 'structure_eqs ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor
  2. | Exists : {
    1. name : string;
    2. selection : ([ `Succ of 'index ], 'gadt, 'constraints, _) selection;
    3. presence : ('kinds, 'local) presence;
    4. variables : ('count, 'local, 'positive, 'negative, 'direct, 'positives, 'negatives, 'directs, 'subpositive, 'subnegative, 'subdirect) subvariables;
    5. construct : 'exists 'subarity. ('count, 'exists) length -> ('constraints, 'exists) gadt_constraints -> ('exists, 'arity, 'subarity) append -> ('value, 'structure, 'subarity, 'rec_group, 'kinds, 'subpositive, 'subnegative, 'subdirect, 'gadt) exists_construct;
    6. destruct : 'value -> ('count, 'constraints, 'value, 'structure, 'arity, 'rec_group, 'kinds, 'subpositive, 'subnegative, 'subdirect, 'gadt) exists_destruct;
    } -> ('value, [ `Exists of 'index * 'count * 'structure * 'local * 'positives * 'negatives * 'directs ], 'arity, 'rec_group, [> `Exists ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor
and ('value, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) exists_construct =
  1. | ExistsConstruct : {
    1. kind : ('types, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor_kind;
    2. construct : 'types -> 'value;
    } -> ('value, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) exists_construct
and ('count, 'constraints, 'value, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) exists_destruct =
  1. | ExistsDestruct : {
    1. exists_count : ('count, 'exists) length;
    2. exists : ('exists, 'arity, 'subarity) append;
    3. constraints : ('constraints, 'exists) gadt_constraints;
    4. kind : ('types, 'structure, 'subarity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor_kind;
    5. values : 'types;
    } -> ('count, 'constraints, 'value, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) exists_destruct
and ('types, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor_kind =
  1. | CTuple : ('types, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) tuple_structure -> ('types, [ `Tuple of 'structure ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor_kind
  2. | CRecord : ('types, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_structure -> ('types, [ `Record of 'structure ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) constructor_kind
and ('types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) tuple_structure =
  1. | TNil : (unit, unit, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) tuple_structure
  2. | TCons : {
    1. head : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    2. tail : ('types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) tuple_structure;
    } -> ('a * 'types, 'structure * 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) tuple_structure
and ('types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_structure =
  1. | RNil : (unit, unit, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_structure
  2. | RCons : {
    1. head : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_field;
    2. tail : ('types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_structure;
    } -> ('a * 'types, 'structure * 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_structure
and ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_field =
  1. | Mono : {
    1. label : string;
    2. desc : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    3. attributes : ('a, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) attributes;
    } -> ('a, [ `Mono of 'structure ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) record_field
  2. | Poly : {
    1. label : string;
    2. variables : ('count, [ `Absent ], 'positive, 'negative, 'direct, 'positives, 'negatives, 'directs, 'subpositive, 'subnegative, 'subdirect) subvariables;
    3. destruct : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'subpositive, 'subnegative, 'subdirect, 'gadt, 'count) forall_destruct;
    4. construct : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'subpositive, 'subnegative, 'subdirect, 'gadt, 'count) forall_construct -> 'a;
    } -> ('a, [ `Poly of 'structure * 'count * 'positives * 'negatives * 'directs ], 'arity, 'rec_group, [> `Poly ] as 'kinds, 'positive, 'negative, 'direct, 'gadt) record_field
and ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt, 'count) forall_construct = {
  1. forall_construct : 'forall 'b 'subarity. ('count, 'forall) length -> ('forall, 'arity, 'subarity) append -> ('b, 'structure, 'subarity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc -> 'b;
}
and ('a, 'structure, 'arity, 'rec_group, 'kinds, 'subpositive, 'subnegative, 'subdirect, 'gadt, 'count) forall_destruct = {
  1. forall_destruct : 'forall 'subarity. ('count, 'forall) length -> ('forall, 'arity, 'subarity) append -> ('a, 'structure, 'subarity, 'rec_group, 'kinds, 'subpositive, 'subnegative, 'subdirect, 'gadt) forall_destruct_result;
}
and ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) forall_destruct_result =
  1. | ForallDestruct : {
    1. desc : ('b, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    2. destruct : 'a -> 'b;
    } -> ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) forall_destruct_result
and ('cases, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructors =
  1. | VCNil : (unit, unit, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructors
  2. | VCCons : {
    1. head : ('types, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructor;
    2. tail : ('cases, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructors;
    } -> ('types * 'cases, 'structure * 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructors
and ('types, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructor =
  1. | VConstructor : {
    1. name : string;
    2. argument : ('types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_argument;
    } -> ('types, [ `Constr of 'structures ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructor
  2. | VInherit : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc -> ('a, [ `Inherit of 'structure ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_constructor
and ('types, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_argument =
  1. | VNone : (unit, unit, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_argument
  2. | VSome : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc -> ('a * unit, 'structure * unit, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) variant_argument
and ('methods, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_methods =
  1. | ONil : (unit, unit, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_methods
  2. | OCons : {
    1. head : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_method;
    2. tail : ('methods, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_methods;
    } -> ('a * 'methods, 'structure * 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_methods
and ('types, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_method =
  1. | OMethod : {
    1. name : string;
    2. desc : ('a, 'structures, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    } -> ('a, [ `Method of 'structures ], 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) object_method
and ('types, 'structures, 'arity, 'rec_group, 'kinds, 'variables, 'gadt) vector =
  1. | VNil : (unit, unit, 'arity, 'rec_group, 'kinds, unit, 'gadt) vector
  2. | VCons : {
    1. head : ('a, 'structure, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) desc;
    2. tail : ('types, 'structures, 'arity, 'rec_group, 'kinds, 'variables, 'gadt) vector;
    } -> ('a * 'types, 'structure * 'structures, 'arity, 'rec_group, 'kinds, ('positive * 'negative * 'direct) * 'variables, 'gadt) vector
and ('eqs, 'structure_eqs, 'kinds, 'gadt) constructor_eqs =
  1. | ENil : (unit, unit, 'kinds, 'gadt) constructor_eqs
  2. | ECons : {
    1. head : ([ `Succ of 'index ], 'gadt, 'eq, _) selection;
    2. tail : ('eqs, 'structure_eqs, 'kinds, 'gadt) constructor_eqs;
    } -> ('eq * 'eqs, 'index * 'structure_eqs, [> `GADT ] as 'kinds, 'gadt) constructor_eqs
and ('a, 'arity, 'rec_group, 'kinds, 'positive, 'negative, 'direct, 'gadt) attributes = {
  1. typed : 'attribute. ('a, 'arity, 'attribute) typed_attribute_kind -> 'attribute option;
}