sig
  type elt
  type t
  val empty : unit -> HashSet.S.t
  val create : int -> HashSet.S.elt -> HashSet.S.t
  val length : HashSet.S.t -> int
  val capacity : HashSet.S.t -> int
  val mem : HashSet.S.t -> HashSet.S.elt -> bool
  val clear : HashSet.S.t -> unit
  val copy : HashSet.S.t -> HashSet.S.t
  val iter_v : (HashSet.S.elt -> unit) -> HashSet.S.t -> unit
  val iter : (HashSet.S.elt -> unit) -> HashSet.S.t -> unit
  val add_unsafe : HashSet.S.t -> HashSet.S.elt -> unit
  val copy_resize : HashSet.S.t -> int -> HashSet.S.t
  val resize : HashSet.S.t -> HashSet.S.elt -> unit
  val add : HashSet.S.t -> HashSet.S.elt -> unit
  val remove : HashSet.S.t -> HashSet.S.elt -> unit
  val create_from_list : HashSet.S.elt list -> HashSet.S.t
  val bucket_lengths : HashSet.S.t -> int array
  val fold : (HashSet.S.elt -> '-> 'a) -> HashSet.S.t -> '-> 'a
  val for_all : (HashSet.S.elt -> bool) -> HashSet.S.t -> bool
  val exists : (HashSet.S.elt -> bool) -> HashSet.S.t -> bool
  val keys : HashSet.S.t -> HashSet.S.elt array
  val equal : HashSet.S.t -> HashSet.S.t -> bool
  val update : HashSet.S.t -> HashSet.S.t -> unit
  val diff_update : HashSet.S.t -> HashSet.S.t -> unit
  val symmetric_diff_update : HashSet.S.t -> HashSet.S.t -> unit
  val inter_update : HashSet.S.t -> HashSet.S.t -> unit
  val union : HashSet.S.t -> HashSet.S.t -> HashSet.S.t
  val diff : HashSet.S.t -> HashSet.S.t -> HashSet.S.t
  val symmetric_diff : HashSet.S.t -> HashSet.S.t -> HashSet.S.t
  val inter : HashSet.S.t -> HashSet.S.t -> HashSet.S.t
end