sig
  module type S0 = S0
  module type S0_phantom = S0_phantom
  module type S1 = S1
  module type S1_phantom_invariant = S1_phantom_invariant
  module type S1_phantom = S1_phantom
  module type S1_permissions = S1_permissions
  module type Generic = Generic
  module type Generic_phantom = 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) Container_intf.Container.fold ->
    ('t, 'a) Container_intf.Container.iter
  val count :
    fold:('t, 'a, int) Container_intf.Container.fold ->
    '-> f:('-> bool) -> int
  val min_elt :
    fold:('t, 'a, 'a option) Container_intf.Container.fold ->
    '-> cmp:('-> '-> int) -> 'a option
  val max_elt :
    fold:('t, 'a, 'a option) Container_intf.Container.fold ->
    '-> cmp:('-> '-> int) -> 'a option
  val length : fold:('t, 'a, int) Container_intf.Container.fold -> '-> int
  val to_list :
    fold:('t, 'a, 'a list) Container_intf.Container.fold -> '-> 'a list
  val to_array :
    fold:('t, 'a, 'a list) Container_intf.Container.fold -> '-> 'a array
  val sum :
    fold:('t, 'a, 'sum) Container_intf.Container.fold ->
    (module Commutative_group.S with type t = 'sum) ->
    '-> f:('-> 'sum) -> 'sum
  val is_empty : iter:('t, 'a) Container_intf.Container.iter -> '-> bool
  val exists :
    iter:('t, 'a) Container_intf.Container.iter ->
    '-> f:('-> bool) -> bool
  val for_all :
    iter:('t, 'a) Container_intf.Container.iter ->
    '-> f:('-> bool) -> bool
  val find :
    iter:('t, 'a) Container_intf.Container.iter ->
    '-> f:('-> bool) -> 'a option
  val find_map :
    iter:('t, 'a) Container_intf.Container.iter ->
    '-> f:('-> 'b option) -> 'b option
  module Make :
    functor (T : 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