sig
  type 'a t = 'Hash_set.t
  module T : sig type 'a elt = 'type 'a t = 'a t end
  val create : int -> '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 : f:('-> '-> 'a) -> init:'-> 'b t -> 'a
  val iter : f:('-> unit) -> 'a t -> unit
  val length : 'a t -> int
  val mem : 'a t -> '-> bool
  val is_empty : 'a t -> bool
  val of_list : 'a list -> 'a t
  val to_list : 'a t -> 'a list
  val equal : 'a t -> 'a t -> bool
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
  val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
  module type S = Hash_set_intf.S
  module type S_binable = Hash_set_intf.S_binable
  module Make :
    functor (H : Hashtbl.HashedType->
      sig
        type elt = H.t
        type t = Hash_set.Make(H).t
        module T : sig type 'a elt = elt type 'a t = t end
        val create : int -> t
        val add : t -> elt -> unit
        val strict_add : t -> elt -> unit
        val remove : t -> elt -> unit
        val strict_remove : t -> elt -> unit
        val clear : t -> unit
        val fold : f:('-> elt -> 'a) -> init:'-> t -> 'a
        val iter : f:(elt -> unit) -> t -> unit
        val length : t -> int
        val mem : t -> elt -> bool
        val is_empty : t -> bool
        val of_list : elt list -> t
        val to_list : t -> elt list
        val equal : t -> t -> bool
        val sexp_of_t : t -> Sexplib.Sexp.t
        val t_of_sexp : Sexplib.Sexp.t -> t
      end
  module Make_binable :
    functor
      (H : sig
             type t
             val equal : t -> t -> bool
             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 elt = H.t
        type t = Hash_set.Make_binable(H).t
        module T : sig type 'a elt = elt type 'a t = t end
        val create : int -> t
        val add : t -> elt -> unit
        val strict_add : t -> elt -> unit
        val remove : t -> elt -> unit
        val strict_remove : t -> elt -> unit
        val clear : t -> unit
        val fold : f:('-> elt -> 'a) -> init:'-> t -> 'a
        val iter : f:(elt -> unit) -> t -> unit
        val length : t -> int
        val mem : t -> elt -> bool
        val is_empty : t -> bool
        val of_list : elt list -> t
        val to_list : t -> elt list
        val equal : t -> t -> bool
        val sexp_of_t : t -> Sexplib.Sexp.t
        val t_of_sexp : Sexplib.Sexp.t -> t
        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