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