sig
  module type S = sig type t val get_hash : GenericSet.S.t -> int end
  module type GenericSetSig =
    sig
      type t
      type elt
      val empty : GenericSet.GenericSetSig.t
      val is_empty : GenericSet.GenericSetSig.t -> bool
      val singleton :
        GenericSet.GenericSetSig.elt -> GenericSet.GenericSetSig.t
      val mem :
        GenericSet.GenericSetSig.elt -> GenericSet.GenericSetSig.t -> bool
      val add :
        GenericSet.GenericSetSig.elt ->
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t
      val remove :
        GenericSet.GenericSetSig.elt ->
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t
      val union :
        GenericSet.GenericSetSig.t ->
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t
      val diff :
        GenericSet.GenericSetSig.t ->
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t
      val equal :
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t -> bool
      val elements :
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.elt list
      val cardinal : GenericSet.GenericSetSig.t -> int
      val iter :
        (GenericSet.GenericSetSig.elt -> unit) ->
        GenericSet.GenericSetSig.t -> unit
      val fold :
        (GenericSet.GenericSetSig.elt -> '-> 'b) ->
        GenericSet.GenericSetSig.t -> '-> 'b
      val exists :
        (GenericSet.GenericSetSig.elt -> bool) ->
        GenericSet.GenericSetSig.t -> bool
      val filter :
        (GenericSet.GenericSetSig.elt -> bool) ->
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t
      val inter :
        GenericSet.GenericSetSig.t ->
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t
      val of_list :
        GenericSet.GenericSetSig.elt list -> GenericSet.GenericSetSig.t
      val of_array :
        GenericSet.GenericSetSig.elt array -> GenericSet.GenericSetSig.t
      val subset :
        GenericSet.GenericSetSig.t -> GenericSet.GenericSetSig.t -> bool
    end
  module Make :
    functor (El : S->
      sig
        type t
        type elt = El.t
        val empty : t
        val is_empty : t -> bool
        val singleton : elt -> t
        val mem : elt -> t -> bool
        val add : elt -> t -> t
        val remove : elt -> t -> t
        val union : t -> t -> t
        val diff : t -> t -> t
        val equal : t -> t -> bool
        val elements : t -> elt list
        val cardinal : t -> int
        val iter : (elt -> unit) -> t -> unit
        val fold : (elt -> '-> 'b) -> t -> '-> 'b
        val exists : (elt -> bool) -> t -> bool
        val filter : (elt -> bool) -> t -> t
        val inter : t -> t -> t
        val of_list : elt list -> t
        val of_array : elt array -> t
        val subset : t -> t -> bool
      end
end