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