functor (X : Set.S->
  sig
    type set = X.t
    type elt = X.elt
    val empty : set
    val is_empty : set -> bool
    val mem : elt -> set -> bool
    val add : elt -> set -> set
    val singleton : elt -> set
    val remove : elt -> set -> set
    val union : set -> set -> set
    val inter : set -> set -> set
    val diff : set -> set -> set
    val compare : set -> set -> int
    val equal : set -> set -> bool
    val subset : set -> set -> bool
    val iter : (elt -> unit) -> set -> unit
    val fold : (elt -> '-> 'a) -> set -> '-> 'a
    val for_all : (elt -> bool) -> set -> bool
    val exists : (elt -> bool) -> set -> bool
    val filter : (elt -> bool) -> set -> set
    val partition : (elt -> bool) -> set -> set * set
    val cardinal : set -> int
    val elements : set -> elt list
    val min_elt : set -> elt
    val max_elt : set -> elt
    val choose : set -> elt
    val split : elt -> set -> set * bool * set
    val of_seq : elt t -> set
    val to_seq : set -> elt t
  end