functor (X : sig type 'a t end) ->
sig
module Tag_internal :
sig
type ('variant, 'args) create =
Args of ('args -> 'variant)
| Const of 'variant
type ('variant, 'args) t = {
label : string;
rep : 'args X.t;
arity : int;
index : int;
ocaml_repr : int;
tyid : 'args Typename.t;
create :
('variant, 'args) Variant_and_record_intf.M.Tag_internal.create;
}
end
module Tag :
sig
type ('variant, 'args) create =
Args of ('args -> 'variant)
| Const of 'variant
type ('variant, 'args) t
val label : ('a, 'b) Variant_and_record_intf.M.??.t -> string
val arity : ('a, 'b) Variant_and_record_intf.M.??.t -> int
val index : ('a, 'b) Variant_and_record_intf.M.??.t -> int
val ocaml_repr : ('a, 'b) Variant_and_record_intf.M.??.t -> int
val create :
('variant, 'args) Variant_and_record_intf.M.??.t ->
('variant, 'args) Variant_and_record_intf.M.??.create
val tyid :
('a, 'args) Variant_and_record_intf.M.??.t -> 'args Typename.t
val traverse :
('a, 'args) Variant_and_record_intf.M.??.t -> 'args X.t
val internal_use_only :
('a, 'b) Variant_and_record_intf.M.Tag_internal.t ->
('a, 'b) Variant_and_record_intf.M.??.t
end
module Variant_internal :
sig
type _ tag =
Tag :
('variant, 'a) Variant_and_record_intf.M.Tag.t -> 'variant
Variant_and_record_intf.M.Variant_internal.tag
type _ value =
Value : ('variant, 'a) Variant_and_record_intf.M.Tag.t *
'a -> 'variant Variant_and_record_intf.M.Variant_internal.value
type 'a t = {
typename : 'a Typename.t;
tags : 'a Variant_and_record_intf.M.Variant_internal.tag array;
polymorphic : bool;
value : 'a -> 'a Variant_and_record_intf.M.Variant_internal.value;
}
end
module Variant :
sig
type _ tag =
Tag :
('variant, 'args) Variant_and_record_intf.M.Tag.t -> 'variant
Variant_and_record_intf.M.??.tag
type _ value =
Value : ('variant, 'args) Variant_and_record_intf.M.Tag.t *
'args -> 'variant Variant_and_record_intf.M.??.value
type 'a t
val typename_of_t :
'a Variant_and_record_intf.M.??.t -> 'a Typename.t
val length : 'a Variant_and_record_intf.M.??.t -> int
val tag :
'a Variant_and_record_intf.M.??.t ->
int -> 'a Variant_and_record_intf.M.??.tag
val is_polymorphic : 'a Variant_and_record_intf.M.??.t -> bool
val value :
'a Variant_and_record_intf.M.??.t ->
'a -> 'a Variant_and_record_intf.M.??.value
val fold :
'a Variant_and_record_intf.M.??.t ->
init:'acc ->
f:('acc -> 'a Variant_and_record_intf.M.??.tag -> 'acc) -> 'acc
val internal_use_only :
'a Variant_and_record_intf.M.Variant_internal.t ->
'a Variant_and_record_intf.M.??.t
end
module Field_internal :
sig
type ('record, 'field) t = {
label : string;
rep : 'field X.t;
index : int;
tyid : 'field Typename.t;
get : 'record -> 'field;
}
end
module Field :
sig
type ('record, 'field) t
val label : ('a, 'b) Variant_and_record_intf.M.??.t -> string
val index : ('a, 'b) Variant_and_record_intf.M.??.t -> int
val get :
('record, 'field) Variant_and_record_intf.M.??.t ->
'record -> 'field
val tyid :
('a, 'field) Variant_and_record_intf.M.??.t -> 'field Typename.t
val traverse :
('a, 'field) Variant_and_record_intf.M.??.t -> 'field X.t
val internal_use_only :
('a, 'b) Variant_and_record_intf.M.Field_internal.t ->
('a, 'b) Variant_and_record_intf.M.??.t
end
module Record_internal :
sig
type _ field =
Field :
('record, 'a) Variant_and_record_intf.M.Field.t -> 'record
Variant_and_record_intf.M.Record_internal.field
type 'record fields = {
get :
'field.
('record, 'field) Variant_and_record_intf.M.Field.t -> 'field;
}
type 'a t = {
typename : 'a Typename.t;
fields : 'a Variant_and_record_intf.M.Record_internal.field array;
has_double_array_tag : bool;
create : 'a Variant_and_record_intf.M.Record_internal.fields -> 'a;
}
end
module Record :
sig
type _ field =
Field :
('record, 'a) Variant_and_record_intf.M.Field.t -> 'record
Variant_and_record_intf.M.??.field
type 'record fields = {
get :
'field.
('record, 'field) Variant_and_record_intf.M.Field.t -> 'field;
}
type 'a t
val typename_of_t :
'a Variant_and_record_intf.M.??.t -> 'a Typename.t
val length : 'a Variant_and_record_intf.M.??.t -> int
val field :
'a Variant_and_record_intf.M.??.t ->
int -> 'a Variant_and_record_intf.M.??.field
val has_double_array_tag : 'a Variant_and_record_intf.M.??.t -> bool
val create :
'a Variant_and_record_intf.M.??.t ->
'a Variant_and_record_intf.M.??.fields -> 'a
val fold :
'a Variant_and_record_intf.M.??.t ->
init:'acc ->
f:('acc -> 'a Variant_and_record_intf.M.??.field -> 'acc) -> 'acc
val internal_use_only :
'a Variant_and_record_intf.M.Record_internal.t ->
'a Variant_and_record_intf.M.??.t
end
end