sig
type ('a, 'b) type_class =
('a, 'b) Container.type_class = {
length : 'b -> int;
is_empty : 'b -> bool;
iter : 'b -> f:('a -> unit) -> unit;
fold : 'c. 'b -> init:'c -> f:('c -> 'a -> 'c) -> 'c;
exists : 'b -> f:('a -> bool) -> bool;
for_all : 'b -> f:('a -> bool) -> bool;
find : 'b -> f:('a -> bool) -> 'a option;
to_list : 'b -> 'a list;
to_array : 'b -> 'a array;
}
type ('a, 'b) fold =
('a, 'b) Container.fold = {
f : 'c. 'b -> init:'c -> f:('c -> 'a -> 'c) -> 'c;
}
val create :
fold:('a, 'b) fold ->
?length:('b -> int) ->
?is_empty:('b -> bool) ->
?iter:('b -> f:('a -> unit) -> unit) ->
?exists:('b -> f:('a -> bool) -> bool) ->
?for_all:('b -> f:('a -> bool) -> bool) ->
?find:('b -> f:('a -> bool) -> 'a option) ->
?to_list:('b -> 'a list) ->
?to_array:('b -> 'a array) -> unit -> ('a, 'b) type_class
module type S0_noclass =
sig
type container
type elt
val mem : ?equal:(elt -> elt -> bool) -> container -> elt -> bool
val length : container -> int
val is_empty : container -> bool
val iter : container -> f:(elt -> unit) -> unit
val fold : container -> init:'a -> f:('a -> elt -> 'a) -> 'a
val exists : container -> f:(elt -> bool) -> bool
val for_all : container -> f:(elt -> bool) -> bool
val find : container -> f:(elt -> bool) -> elt option
val to_list : container -> elt list
val to_array : container -> elt array
end
module type S0 =
sig
type container
type elt
val mem : ?equal:(elt -> elt -> bool) -> container -> elt -> bool
val length : container -> int
val is_empty : container -> bool
val iter : container -> f:(elt -> unit) -> unit
val fold : container -> init:'a -> f:('a -> elt -> 'a) -> 'a
val exists : container -> f:(elt -> bool) -> bool
val for_all : container -> f:(elt -> bool) -> bool
val find : container -> f:(elt -> bool) -> elt option
val to_list : container -> elt list
val to_array : container -> elt array
val container : (elt, container) type_class
end
module type S0_phantom_noclass =
sig
type elt
type 'a container
val length : 'a container -> int
val is_empty : 'a container -> bool
val iter : 'a container -> f:(elt -> unit) -> unit
val fold : 'a container -> init:'b -> f:('b -> elt -> 'b) -> 'b
val exists : 'a container -> f:(elt -> bool) -> bool
val for_all : 'a container -> f:(elt -> bool) -> bool
val find : 'a container -> f:(elt -> bool) -> elt option
val to_list : 'a container -> elt list
val to_array : 'a container -> elt array
end
module type S0_phantom =
sig
type elt
type 'a container
val length : 'a container -> int
val is_empty : 'a container -> bool
val iter : 'a container -> f:(elt -> unit) -> unit
val fold : 'a container -> init:'b -> f:('b -> elt -> 'b) -> 'b
val exists : 'a container -> f:(elt -> bool) -> bool
val for_all : 'a container -> f:(elt -> bool) -> bool
val find : 'a container -> f:(elt -> bool) -> elt option
val to_list : 'a container -> elt list
val to_array : 'a container -> elt array
val container : (elt, 'a container) type_class
end
module type S1_noclass =
sig
type 'a container
val length : 'a container -> int
val is_empty : 'a container -> bool
val iter : 'a container -> f:('a -> unit) -> unit
val fold : 'a container -> init:'b -> f:('b -> 'a -> 'b) -> 'b
val exists : 'a container -> f:('a -> bool) -> bool
val for_all : 'a container -> f:('a -> bool) -> bool
val find : 'a container -> f:('a -> bool) -> 'a option
val to_list : 'a container -> 'a list
val to_array : 'a container -> 'a array
end
module type S1 =
sig
type 'a container
val length : 'a container -> int
val is_empty : 'a container -> bool
val iter : 'a container -> f:('a -> unit) -> unit
val fold : 'a container -> init:'b -> f:('b -> 'a -> 'b) -> 'b
val exists : 'a container -> f:('a -> bool) -> bool
val for_all : 'a container -> f:('a -> bool) -> bool
val find : 'a container -> f:('a -> bool) -> 'a option
val to_list : 'a container -> 'a list
val to_array : 'a container -> 'a array
val container : ('a, 'a container) type_class
end
module type S1_phantom_noclass =
sig
type ('a, +'b) container
val length : ('a, 'b) container -> int
val is_empty : ('a, 'b) container -> bool
val iter : ('a, 'b) container -> f:('a -> unit) -> unit
val fold : ('a, 'b) container -> init:'c -> f:('c -> 'a -> 'c) -> 'c
val exists : ('a, 'b) container -> f:('a -> bool) -> bool
val for_all : ('a, 'b) container -> f:('a -> bool) -> bool
val find : ('a, 'b) container -> f:('a -> bool) -> 'a option
val to_list : ('a, 'b) container -> 'a list
val to_array : ('a, 'b) container -> 'a array
end
module type S1_phantom =
sig
type ('a, +'b) container
val length : ('a, 'b) container -> int
val is_empty : ('a, 'b) container -> bool
val iter : ('a, 'b) container -> f:('a -> unit) -> unit
val fold : ('a, 'b) container -> init:'c -> f:('c -> 'a -> 'c) -> 'c
val exists : ('a, 'b) container -> f:('a -> bool) -> bool
val for_all : ('a, 'b) container -> f:('a -> bool) -> bool
val find : ('a, 'b) container -> f:('a -> bool) -> 'a option
val to_list : ('a, 'b) container -> 'a list
val to_array : ('a, 'b) container -> 'a array
val container : ('a, ('a, 'b) container) type_class
end
module Check :
functor (T : sig type 'a elt type 'a container end) ->
functor
(M : sig
val length : 'a T.container -> int
val is_empty : 'a T.container -> bool
val iter : 'a T.container -> f:('a T.elt -> unit) -> unit
val fold :
'a T.container -> init:'b -> f:('b -> 'a T.elt -> 'b) -> 'b
val exists : 'a T.container -> f:('a T.elt -> bool) -> bool
val for_all : 'a T.container -> f:('a T.elt -> bool) -> bool
val find :
'a T.container -> f:('a T.elt -> bool) -> 'a T.elt option
val to_list : 'a T.container -> 'a T.elt list
val to_array : 'a T.container -> 'a T.elt array
end) ->
sig end
module Check_S0 : functor (M : S0) -> sig end
module Check_S0_phantom : functor (M : S0_phantom) -> sig end
module Check_S1 :
functor (M : S1) ->
functor
(M : sig
val length : 'a M.container -> int
val is_empty : 'a M.container -> bool
val iter : 'a M.container -> f:('a -> unit) -> unit
val fold :
'a M.container -> init:'b -> f:('b -> 'a -> 'b) -> 'b
val exists : 'a M.container -> f:('a -> bool) -> bool
val for_all : 'a M.container -> f:('a -> bool) -> bool
val find : 'a M.container -> f:('a -> bool) -> 'a option
val to_list : 'a M.container -> 'a list
val to_array : 'a M.container -> 'a array
end) ->
sig end
type phantom = Container.phantom
module Check_S1_phantom : functor (M : S1_phantom) -> sig end
end