functor
  (Hashtbl : sig
               type 'a key
               type ('a, 'b) t
               val add :
                 ('a, 'b) Hash_set.t ->
                 key:'a Hash_set.key -> data:'b -> unit
               val clear : ('a, 'b) Hash_set.t -> unit
               val create : int -> ('a, 'b) Hash_set.t
               val fold :
                 f:(key:'a Hash_set.key -> data:'b -> 'c -> 'c) ->
                 ('a, 'b) Hash_set.t -> init:'c -> 'c
               val iter :
                 f:(key:'a Hash_set.key -> data:'b -> unit) ->
                 ('a, 'b) Hash_set.t -> unit
               val keys : ('a, 'b) Hash_set.t -> 'a Hash_set.key list
               val length : ('a, 'b) Hash_set.t -> int
               val mem : ('a, 'b) Hash_set.t -> 'a Hash_set.key -> bool
               val of_alist :
                 ('a Hash_set.key * 'b) list -> ('a, 'b) Hash_set.t
               val remove : ('a, 'b) Hash_set.t -> 'a Hash_set.key -> unit
               val replace :
                 ('a, 'b) Hash_set.t ->
                 key:'a Hash_set.key -> data:'b -> unit
             end) ->
  sig
    type 'a elt_ = 'a Hashtbl.key
    type 'a set = ('a, unit) Hashtbl.t
    val clear : ('a, 'b) Hashtbl.t -> unit
    val create : int -> ('a, 'b) Hashtbl.t
    val length : ('a, 'b) Hashtbl.t -> int
    val mem : ('a, 'b) Hashtbl.t -> 'a Hashtbl.key -> bool
    val add : ('a, unit) Hashtbl.t -> 'a Hashtbl.key -> unit
    val strict_add : ('a, unit) Hashtbl.t -> 'a Hashtbl.key -> unit
    val remove : ('a, 'b) Hashtbl.t -> 'a Hashtbl.key -> unit
    val strict_remove : ('a, 'b) Hashtbl.t -> 'a Hashtbl.key -> unit
    val fold :
      f:('a -> 'b Hashtbl.key -> 'a) -> init:'a -> ('b, 'c) Hashtbl.t -> 'a
    val iter : f:('a Hashtbl.key -> unit) -> ('a, 'b) Hashtbl.t -> unit
    val to_list : ('a, 'b) Hashtbl.t -> 'a Hashtbl.key list
    val of_list : 'a Hashtbl.key list -> ('a, unit) Hashtbl.t
    val sexp_of_t :
      ('a Hashtbl.key -> Sexplib.Sexp.t) ->
      ('a, 'b) Hashtbl.t -> Sexplib.Sexp.t
    val t_of_sexp :
      (Sexplib.Sexp.t -> 'a Hashtbl.key) ->
      Sexplib.Sexp.t -> ('a, unit) Hashtbl.t
  end