sig
  module type S0 = Container_intf.S0
  module type S0_phantom = Container_intf.S0_phantom
  module type S1 = Container_intf.S1
  module type S1_phantom_invariant = Container_intf.S1_phantom_invariant
  module type S1_phantom = Container_intf.S1_phantom
  module type S1_permissions = Container_intf.S1_permissions
  module type Generic = Container_intf.Generic
  module type Generic_phantom = Container_intf.Generic_phantom
  type ('t, 'a, 'accum) fold =
      '-> init:'accum -> f:('accum -> '-> 'accum) -> 'accum
  type ('t, 'a) iter = '-> f:('-> unit) -> unit
  val iter : fold:('t, 'a, unit) fold -> ('t, 'a) iter
  val count : fold:('t, 'a, int) fold -> '-> f:('-> bool) -> int
  val min_elt :
    fold:('t, 'a, 'a option) fold -> '-> cmp:('-> '-> int) -> 'a option
  val max_elt :
    fold:('t, 'a, 'a option) fold -> '-> cmp:('-> '-> int) -> 'a option
  val length : fold:('t, 'a, int) fold -> '-> int
  val to_list : fold:('t, 'a, 'a list) fold -> '-> 'a list
  val to_array : fold:('t, 'a, 'a list) fold -> '-> 'a array
  val sum :
    fold:('t, 'a, 'sum) fold ->
    (module Commutative_group.S with type t = 'sum) ->
    '-> f:('-> 'sum) -> 'sum
  val is_empty : iter:('t, 'a) iter -> '-> bool
  val exists : iter:('t, 'a) iter -> '-> f:('-> bool) -> bool
  val for_all : iter:('t, 'a) iter -> '-> f:('-> bool) -> bool
  val find : iter:('t, 'a) iter -> '-> f:('-> bool) -> 'a option
  val find_map : iter:('t, 'a) iter -> '-> f:('-> 'b option) -> 'b option
  module Make :
    functor (T : Container_intf.Make_arg->
      sig
        val mem : ?equal:('-> '-> bool) -> 'T.t -> '-> bool
        val length : 'T.t -> int
        val is_empty : 'T.t -> bool
        val iter : 'T.t -> f:('-> unit) -> unit
        val fold :
          'T.t -> init:'accum -> f:('accum -> '-> 'accum) -> 'accum
        val exists : 'T.t -> f:('-> bool) -> bool
        val for_all : 'T.t -> f:('-> bool) -> bool
        val count : 'T.t -> f:('-> bool) -> int
        val sum :
          (module Commutative_group.S with type t = 'sum) ->
          'T.t -> f:('-> 'sum) -> 'sum
        val find : 'T.t -> f:('-> bool) -> 'a option
        val find_map : 'T.t -> f:('-> 'b option) -> 'b option
        val to_list : 'T.t -> 'a list
        val to_array : 'T.t -> 'a array
        val min_elt : 'T.t -> cmp:('-> '-> int) -> 'a option
        val max_elt : 'T.t -> cmp:('-> '-> int) -> 'a option
      end
end