Functor Container.Make

module Make: 
functor (T : T) -> sig .. end
The idiom for using Container.Make is to bind the resulting module and to explicitly import each of the functions that one wants:

      module C = Container.Make (struct ... end)
      let count    = C.count
      let exists   = C.exists
      let find     = C.find
      ...
    

This is preferable to:

      include Container.Make (struct ... end)
    

because the include makes it to easy to shadow specialized implementations of container functions (length being a common one).

Container.Make implements iter in terms of fold, which is often slower than implementing iter directly.

Parameters:
T : T

val fold : 'a Container.T.t -> init:'b -> f:('b -> 'a -> 'b) -> 'b
val count : 'a Container.T.t -> f:('a -> bool) -> int
val iter : 'a Container.T.t -> f:('a -> unit) -> unit
val length : 'a Container.T.t -> int
val is_empty : 'a Container.T.t -> bool
val exists : 'a Container.T.t -> f:('a -> bool) -> bool
val mem : ?equal:('a -> 'a -> bool) -> 'a Container.T.t -> 'a -> bool
val for_all : 'a Container.T.t -> f:('a -> bool) -> bool
val find_map : 'a Container.T.t -> f:('a -> 'b option) -> 'b option
val find : 'a Container.T.t -> f:('a -> bool) -> 'a option
val to_list : 'a Container.T.t -> 'a list
val to_array : 'a Container.T.t -> 'a array