sig
  type 'a t
  type 'a elt = 'a
  val create :
    ('a, unit -> 'a t) Hash_set_intf.create_options_with_hashable_required
  val of_list :
    ('a, 'a elt list -> 'a t)
    Hash_set_intf.create_options_with_hashable_required
  val length : 'a t -> int
  val is_empty : 'a t -> bool
  val iter : 'a t -> f:('a elt -> unit) -> unit
  val fold : 'a t -> init:'accum -> f:('accum -> 'a elt -> 'accum) -> 'accum
  val exists : 'a t -> f:('a elt -> bool) -> bool
  val for_all : 'a t -> f:('a elt -> bool) -> bool
  val count : 'a t -> f:('a elt -> bool) -> int
  val find : 'a t -> f:('a elt -> bool) -> 'a elt option
  val find_map : 'a t -> f:('a elt -> 'b option) -> 'b option
  val to_list : 'a t -> 'a elt list
  val to_array : 'a t -> 'a elt array
  val mem : 'a t -> '-> bool
  val copy : 'a t -> 'a t
  val add : 'a t -> '-> unit
  val strict_add : 'a t -> '-> unit Or_error.t
  val strict_add_exn : 'a t -> '-> unit
  val remove : 'a t -> '-> unit
  val strict_remove : 'a t -> '-> unit Or_error.t
  val strict_remove_exn : 'a t -> '-> unit
  val clear : 'a t -> unit
  val equal : 'a t -> 'a t -> bool
  val filter : 'a t -> f:('-> bool) -> 'a t
  val diff : 'a t -> 'a t -> 'a t
  val of_hashtbl_keys : ('a, 'b) Core_hashtbl.t -> 'a t
  val filter_inplace : 'a t -> f:('-> bool) -> unit
  module type Elt = Core_hashtbl.Key
  module type Elt_binable = Core_hashtbl.Key_binable
  module type S =
    sig
      type elt
      type 'a hash_set = 'a t
      type t = elt hash_set
      type 'a t_ = t
      type 'a elt_ = elt
      val create :
        ('a, unit -> 'a t_) Hash_set_intf.create_options_without_hashable
      val of_list :
        ('a, 'a elt_ list -> 'a t_)
        Hash_set_intf.create_options_without_hashable
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  module type S_binable =
    sig
      type elt
      type 'a hash_set = 'a t
      type t = elt hash_set
      type 'a t_ = t
      type 'a elt_ = elt
      val create :
        ('a, unit -> 'a t_) Hash_set_intf.create_options_without_hashable
      val of_list :
        ('a, 'a elt_ list -> 'a t_)
        Hash_set_intf.create_options_without_hashable
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
      val bin_size_t : t Bin_prot.Size.sizer
      val bin_write_t : t Bin_prot.Map_to_safe.writer
      val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
      val bin_read_t : t Bin_prot.Read_ml.reader
      val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : t Bin_prot.Type_class.writer
      val bin_reader_t : t Bin_prot.Type_class.reader
      val bin_t : t Bin_prot.Type_class.t
    end
  module Poly :
    sig
      type 'a t = 'Hash_set.Poly.t
      type 'a elt = 'a
      val create :
        ('a, unit -> 'a t) Hash_set_intf.create_options_without_hashable
      val of_list :
        ('a, 'a elt list -> 'a t)
        Hash_set_intf.create_options_without_hashable
      val length : 'a t -> int
      val is_empty : 'a t -> bool
      val iter : 'a t -> f:('a elt -> unit) -> unit
      val fold :
        'a t -> init:'accum -> f:('accum -> 'a elt -> 'accum) -> 'accum
      val exists : 'a t -> f:('a elt -> bool) -> bool
      val for_all : 'a t -> f:('a elt -> bool) -> bool
      val count : 'a t -> f:('a elt -> bool) -> int
      val find : 'a t -> f:('a elt -> bool) -> 'a elt option
      val find_map : 'a t -> f:('a elt -> 'b option) -> 'b option
      val to_list : 'a t -> 'a elt list
      val to_array : 'a t -> 'a elt array
      val mem : 'a t -> '-> bool
      val copy : 'a t -> 'a t
      val add : 'a t -> '-> unit
      val strict_add : 'a t -> '-> unit Or_error.t
      val strict_add_exn : 'a t -> '-> unit
      val remove : 'a t -> '-> unit
      val strict_remove : 'a t -> '-> unit Or_error.t
      val strict_remove_exn : 'a t -> '-> unit
      val clear : 'a t -> unit
      val equal : 'a t -> 'a t -> bool
      val filter : 'a t -> f:('-> bool) -> 'a t
      val diff : 'a t -> 'a t -> 'a t
      val of_hashtbl_keys : ('a, 'b) Core_hashtbl.t -> 'a t
      val filter_inplace : 'a t -> f:('-> bool) -> unit
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'Hash_set.Poly.t
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) -> 'Hash_set.Poly.t -> Sexplib.Sexp.t
    end
  module Make :
    functor (Elt : Elt->
      sig
        type elt = Elt.t
        type 'a hash_set = 'a t
        type t = elt hash_set
        type 'a t_ = t
        type 'a elt_ = elt
        val create :
          ('a, unit -> 'a t_) Hash_set_intf.create_options_without_hashable
        val of_list :
          ('a, 'a elt_ list -> 'a t_)
          Hash_set_intf.create_options_without_hashable
        val t_of_sexp : Sexplib.Sexp.t -> t
        val sexp_of_t : t -> Sexplib.Sexp.t
      end
  module Make_binable :
    functor (Elt : Elt_binable->
      sig
        type elt = Elt.t
        type 'a hash_set = 'a t
        type t = elt hash_set
        type 'a t_ = t
        type 'a elt_ = elt
        val create :
          ('a, unit -> 'a t_) Hash_set_intf.create_options_without_hashable
        val of_list :
          ('a, 'a elt_ list -> 'a t_)
          Hash_set_intf.create_options_without_hashable
        val t_of_sexp : Sexplib.Sexp.t -> t
        val sexp_of_t : t -> Sexplib.Sexp.t
        val bin_size_t : t Bin_prot.Size.sizer
        val bin_write_t : t Bin_prot.Map_to_safe.writer
        val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
        val bin_read_t : t Bin_prot.Read_ml.reader
        val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
        val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
        val bin_writer_t : t Bin_prot.Type_class.writer
        val bin_reader_t : t Bin_prot.Type_class.reader
        val bin_t : t Bin_prot.Type_class.t
      end
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'Hash_set.t -> Sexplib.Sexp.t
end