sig
  type 'a t
  val empty : unit -> 'HashSet.t
  val create : int -> '-> 'HashSet.t
  val length : 'HashSet.t -> int
  val capacity : 'HashSet.t -> int
  val clear : 'HashSet.t -> unit
  val copy : 'HashSet.t -> 'HashSet.t
  val mem : 'HashSet.t -> '-> bool
  val iter : ('-> unit) -> 'HashSet.t -> unit
  val add_unsafe : 'HashSet.t -> '-> unit
  val copy_resize : 'HashSet.t -> int -> 'HashSet.t
  val add : 'HashSet.t -> '-> unit
  val remove : 'HashSet.t -> '-> unit
  val create_from_list : 'a list -> 'HashSet.t
  val bucket_lengths : 'HashSet.t -> int array
  val fold : ('-> '-> 'b) -> 'HashSet.t -> '-> 'b
  val for_all : ('-> bool) -> 'HashSet.t -> bool
  val exists : ('-> bool) -> 'HashSet.t -> bool
  val keys : 'HashSet.t -> 'a array
  val equal : 'HashSet.t -> 'HashSet.t -> bool
  val update : 'HashSet.t -> 'HashSet.t -> unit
  val diff_update : 'HashSet.t -> 'HashSet.t -> unit
  val symmetric_diff_update : 'HashSet.t -> 'HashSet.t -> unit
  val inter_update : 'HashSet.t -> 'HashSet.t -> unit
  val union : 'HashSet.t -> 'HashSet.t -> 'HashSet.t
  val diff : 'HashSet.t -> 'HashSet.t -> 'HashSet.t
  val symmetric_diff : 'HashSet.t -> 'HashSet.t -> 'HashSet.t
  val inter : 'HashSet.t -> 'HashSet.t -> 'HashSet.t
  module type HashedType =
    sig
      type t
      val compare : HashSet.HashedType.t -> HashSet.HashedType.t -> int
      val hash : HashSet.HashedType.t -> int
    end
  module type S =
    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
  module Make :
    functor (H : HashedType->
      sig
        type elt = H.t
        type t
        val empty : unit -> t
        val create : int -> elt -> t
        val length : t -> int
        val capacity : t -> int
        val mem : t -> elt -> bool
        val clear : t -> unit
        val copy : t -> t
        val iter_v : (elt -> unit) -> t -> unit
        val iter : (elt -> unit) -> t -> unit
        val add_unsafe : t -> elt -> unit
        val copy_resize : t -> int -> t
        val resize : t -> elt -> unit
        val add : t -> elt -> unit
        val remove : t -> elt -> unit
        val create_from_list : elt list -> t
        val bucket_lengths : t -> int array
        val fold : (elt -> '-> 'a) -> t -> '-> 'a
        val for_all : (elt -> bool) -> t -> bool
        val exists : (elt -> bool) -> t -> bool
        val keys : t -> elt array
        val equal : t -> t -> bool
        val update : t -> t -> unit
        val diff_update : t -> t -> unit
        val symmetric_diff_update : t -> t -> unit
        val inter_update : t -> t -> unit
        val union : t -> t -> t
        val diff : t -> t -> t
        val symmetric_diff : t -> t -> t
        val inter : t -> t -> t
      end
end