functor (T : T.T2->
  functor (Tree : T.T2->
    functor (Elt : T.T1->
      functor (Options : T.T3->
        functor
          (M : sig
                 type ('a, 'cmp) set
                 val empty : ('a, 'cmp, ('a, 'cmp) T.t) Options.t
                 val singleton :
                   ('a, 'cmp, 'Elt.t -> ('a, 'cmp) T.t) Options.t
                 val union_list :
                   ('a, 'cmp, ('a, 'cmp) T.t list -> ('a, 'cmp) T.t)
                   Options.t
                 val of_list :
                   ('a, 'cmp, 'Elt.t list -> ('a, 'cmp) T.t) Options.t
                 val of_array :
                   ('a, 'cmp, 'Elt.t array -> ('a, 'cmp) T.t) Options.t
                 val of_sorted_array :
                   ('a, 'cmp, 'Elt.t array -> ('a, 'cmp) T.t Or_error.t)
                   Options.t
                 val of_sorted_array_unchecked :
                   ('a, 'cmp, 'Elt.t array -> ('a, 'cmp) T.t) Options.t
                 val stable_dedup_list :
                   ('a, 'b, 'Elt.t list -> 'Elt.t list) Options.t
                 val map :
                   ('b, 'cmp,
                    ('a, 'c) set -> f:('-> 'Elt.t) -> ('b, 'cmp) T.t)
                   Options.t
                 val filter_map :
                   ('b, 'cmp,
                    ('a, 'c) set ->
                    f:('-> 'Elt.t option) -> ('b, 'cmp) T.t)
                   Options.t
                 val of_tree :
                   ('a, 'cmp, ('Elt.t, 'cmp) Tree.t -> ('a, 'cmp) T.t)
                   Options.t
               end->
          sig  end