sig
  module type ELT =
    sig
      type t
      val compare : CCHashconsedSet.ELT.t -> CCHashconsedSet.ELT.t -> int
      val hash : CCHashconsedSet.ELT.t -> int
    end
  module type S =
    sig
      type elt
      type t
      val empty : CCHashconsedSet.S.t
      val singleton : CCHashconsedSet.S.elt -> CCHashconsedSet.S.t
      val doubleton :
        CCHashconsedSet.S.elt -> CCHashconsedSet.S.elt -> CCHashconsedSet.S.t
      val mem : CCHashconsedSet.S.elt -> CCHashconsedSet.S.t -> bool
      val equal : CCHashconsedSet.S.t -> CCHashconsedSet.S.t -> bool
      val compare : CCHashconsedSet.S.t -> CCHashconsedSet.S.t -> int
      val hash : CCHashconsedSet.S.t -> int
      val add :
        CCHashconsedSet.S.elt -> CCHashconsedSet.S.t -> CCHashconsedSet.S.t
      val remove :
        CCHashconsedSet.S.elt -> CCHashconsedSet.S.t -> CCHashconsedSet.S.t
      val cardinal : CCHashconsedSet.S.t -> int
      val iter :
        (CCHashconsedSet.S.elt -> unit) -> CCHashconsedSet.S.t -> unit
      val fold :
        (CCHashconsedSet.S.elt -> '-> 'a) ->
        CCHashconsedSet.S.t -> '-> 'a
      val choose : CCHashconsedSet.S.t -> CCHashconsedSet.S.elt option
      val choose_exn : CCHashconsedSet.S.t -> CCHashconsedSet.S.elt
      val union :
        CCHashconsedSet.S.t -> CCHashconsedSet.S.t -> CCHashconsedSet.S.t
      val inter :
        CCHashconsedSet.S.t -> CCHashconsedSet.S.t -> CCHashconsedSet.S.t
      val diff :
        CCHashconsedSet.S.t -> CCHashconsedSet.S.t -> CCHashconsedSet.S.t
      type 'a sequence = ('-> unit) -> unit
      type 'a gen = unit -> 'a option
      val add_list :
        CCHashconsedSet.S.t ->
        CCHashconsedSet.S.elt list -> CCHashconsedSet.S.t
      val of_list : CCHashconsedSet.S.elt list -> CCHashconsedSet.S.t
      val to_list : CCHashconsedSet.S.t -> CCHashconsedSet.S.elt list
      val add_seq :
        CCHashconsedSet.S.t ->
        CCHashconsedSet.S.elt CCHashconsedSet.S.sequence ->
        CCHashconsedSet.S.t
      val of_seq :
        CCHashconsedSet.S.elt CCHashconsedSet.S.sequence ->
        CCHashconsedSet.S.t
      val to_seq :
        CCHashconsedSet.S.t ->
        CCHashconsedSet.S.elt CCHashconsedSet.S.sequence
    end
  module Make :
    functor (E : ELT->
      sig
        type elt = E.t
        type t
        val empty : t
        val singleton : elt -> t
        val doubleton : elt -> elt -> t
        val mem : elt -> t -> bool
        val equal : t -> t -> bool
        val compare : t -> t -> int
        val hash : t -> int
        val add : elt -> t -> t
        val remove : elt -> t -> t
        val cardinal : t -> int
        val iter : (elt -> unit) -> t -> unit
        val fold : (elt -> '-> 'a) -> t -> '-> 'a
        val choose : t -> elt option
        val choose_exn : t -> elt
        val union : t -> t -> t
        val inter : t -> t -> t
        val diff : t -> t -> t
        type 'a sequence = ('-> unit) -> unit
        type 'a gen = unit -> 'a option
        val add_list : t -> elt list -> t
        val of_list : elt list -> t
        val to_list : t -> elt list
        val add_seq : t -> elt sequence -> t
        val of_seq : elt sequence -> t
        val to_seq : t -> elt sequence
      end
end