functor (T : sig type 'a elt type 'a container end->
  functor
    (M : sig
           val length : 'T.container -> int
           val is_empty : 'T.container -> bool
           val iter : 'T.container -> f:('T.elt -> unit) -> unit
           val fold :
             'T.container -> init:'-> f:('-> 'T.elt -> 'b) -> 'b
           val exists : 'T.container -> f:('T.elt -> bool) -> bool
           val for_all : 'T.container -> f:('T.elt -> bool) -> bool
           val find :
             'T.container -> f:('T.elt -> bool) -> 'T.elt option
           val to_list : 'T.container -> 'T.elt list
           val to_array : 'T.container -> 'T.elt array
         end->
    sig  end