sig
  type 'a t = 'Hash_set.t
  val copy : 'a t -> 'a t
  val add : 'a t -> '-> unit
  val strict_add : 'a t -> '-> unit
  val remove : 'a t -> '-> unit
  val strict_remove : 'a t -> '-> unit
  val clear : 'a t -> unit
  val fold : 'a t -> init:'-> f:('-> '-> 'b) -> 'b
  val iter : 'a t -> f:('-> unit) -> unit
  val length : 'a t -> int
  val mem : 'a t -> '-> bool
  val is_empty : 'a t -> bool
  val to_list : 'a t -> 'a list
  val equal : 'a t -> 'a t -> bool
  val filter : 'a t -> f:('-> bool) -> 'a t
  val diff : 'a t -> 'a t -> 'a t
  type 'a hash_set = 'a t
  module Poly :
    sig
      type 'a t = 'a hash_set
      type 'a sexpable = 'a t
      val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a sexpable -> Sexplib.Sexp.t
      val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a sexpable
      val create : ?growth_allowed:bool -> ?size:int -> unit -> 'a t
      val of_list : 'a list -> 'a t
    end
  module Make :
    functor (H : Core_hashtbl.Key->
      sig
        type elem = H.t
        type t = elem hash_set
        val create : ?growth_allowed:bool -> ?size:int -> unit -> t
        val of_list : H.t list -> t
        type sexpable = t
        val sexp_of_t : sexpable -> Sexplib.Sexp.t
        val t_of_sexp : Sexplib.Sexp.t -> sexpable
      end
  module Make_binable :
    functor
      (H : sig
             type t
             val compare : t -> t -> int
             val hash : t -> int
             type sexpable = t
             val sexp_of_t : sexpable -> Sexplib.Sexp.t
             val t_of_sexp : Sexplib.Sexp.t -> sexpable
             type binable = t
             val bin_size_t : binable Bin_prot.Size.sizer
             val bin_write_t : binable Bin_prot.Map_to_safe.writer
             val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
             val bin_read_t : binable Bin_prot.Read_ml.reader
             val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
             val bin_read_t__ :
               (int -> binable) Bin_prot.Unsafe_read_c.reader
             val bin_writer_t : binable Bin_prot.Type_class.writer
             val bin_reader_t : binable Bin_prot.Type_class.reader
             val bin_t : binable Bin_prot.Type_class.t
           end->
      sig
        type elem = H.t
        type t = elem hash_set
        val create : ?growth_allowed:bool -> ?size:int -> unit -> t
        val of_list : H.t list -> t
        type sexpable = t
        val sexp_of_t : sexpable -> Sexplib.Sexp.t
        val t_of_sexp : Sexplib.Sexp.t -> sexpable
        type binable = t
        val bin_size_t : binable Bin_prot.Size.sizer
        val bin_write_t : binable Bin_prot.Map_to_safe.writer
        val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
        val bin_read_t : binable Bin_prot.Read_ml.reader
        val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
        val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
        val bin_writer_t : binable Bin_prot.Type_class.writer
        val bin_reader_t : binable Bin_prot.Type_class.reader
        val bin_t : binable Bin_prot.Type_class.t
      end
end