sig
  type 'a sequence = ('-> unit) -> unit
  type 'a printer = Format.formatter -> '-> unit
  module type S =
    sig
      type t
      type elt
      val create : int -> CCHashSet.S.t
      val singleton : CCHashSet.S.elt -> CCHashSet.S.t
      val clear : CCHashSet.S.t -> unit
      val copy : CCHashSet.S.t -> CCHashSet.S.t
      val copy_into : into:CCHashSet.S.t -> CCHashSet.S.t -> unit
      val insert : CCHashSet.S.t -> CCHashSet.S.elt -> unit
      val remove : CCHashSet.S.t -> CCHashSet.S.elt -> unit
      val cardinal : CCHashSet.S.t -> int
      val mem : CCHashSet.S.t -> CCHashSet.S.elt -> bool
      val find_exn : CCHashSet.S.t -> CCHashSet.S.elt -> CCHashSet.S.elt
      val find : CCHashSet.S.t -> CCHashSet.S.elt -> CCHashSet.S.elt option
      val inter : CCHashSet.S.t -> CCHashSet.S.t -> CCHashSet.S.t
      val inter_mut : into:CCHashSet.S.t -> CCHashSet.S.t -> unit
      val union : CCHashSet.S.t -> CCHashSet.S.t -> CCHashSet.S.t
      val union_mut : into:CCHashSet.S.t -> CCHashSet.S.t -> unit
      val diff : CCHashSet.S.t -> CCHashSet.S.t -> CCHashSet.S.t
      val subset : CCHashSet.S.t -> CCHashSet.S.t -> bool
      val equal : CCHashSet.S.t -> CCHashSet.S.t -> bool
      val for_all : (CCHashSet.S.elt -> bool) -> CCHashSet.S.t -> bool
      val exists : (CCHashSet.S.elt -> bool) -> CCHashSet.S.t -> bool
      val iter : (CCHashSet.S.elt -> unit) -> CCHashSet.S.t -> unit
      val fold : ('-> CCHashSet.S.elt -> 'a) -> '-> CCHashSet.S.t -> 'a
      val elements : CCHashSet.S.t -> CCHashSet.S.elt list
      val of_list : CCHashSet.S.elt list -> CCHashSet.S.t
      val to_seq : CCHashSet.S.t -> CCHashSet.S.elt CCHashSet.sequence
      val of_seq : CCHashSet.S.elt CCHashSet.sequence -> CCHashSet.S.t
      val add_seq :
        CCHashSet.S.t -> CCHashSet.S.elt CCHashSet.sequence -> unit
      val pp :
        ?sep:string ->
        CCHashSet.S.elt CCHashSet.printer -> CCHashSet.S.t CCHashSet.printer
    end
  module type ELEMENT =
    sig
      type t
      val equal : CCHashSet.ELEMENT.t -> CCHashSet.ELEMENT.t -> bool
      val hash : CCHashSet.ELEMENT.t -> int
    end
  module Make :
    functor (E : ELEMENT->
      sig
        type t
        type elt = E.t
        val create : int -> t
        val singleton : elt -> t
        val clear : t -> unit
        val copy : t -> t
        val copy_into : into:t -> t -> unit
        val insert : t -> elt -> unit
        val remove : t -> elt -> unit
        val cardinal : t -> int
        val mem : t -> elt -> bool
        val find_exn : t -> elt -> elt
        val find : t -> elt -> elt option
        val inter : t -> t -> t
        val inter_mut : into:t -> t -> unit
        val union : t -> t -> t
        val union_mut : into:t -> t -> unit
        val diff : t -> t -> t
        val subset : t -> t -> bool
        val equal : t -> t -> bool
        val for_all : (elt -> bool) -> t -> bool
        val exists : (elt -> bool) -> t -> bool
        val iter : (elt -> unit) -> t -> unit
        val fold : ('-> elt -> 'a) -> '-> t -> 'a
        val elements : t -> elt list
        val of_list : elt list -> t
        val to_seq : t -> elt sequence
        val of_seq : elt sequence -> t
        val add_seq : t -> elt sequence -> unit
        val pp : ?sep:string -> elt printer -> t printer
      end
end