functor
  (T : T.T2) (Tree : T.T2) (Elt : T.T1) (Cmp : T.T1) (Options : T.T3) (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
    val of_map_keys : ('Elt.t, 'b, 'cmp Cmp.t) Map.t -> ('a, 'cmp) T.t
  end-> sig  end