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