sig
  module type S =
    sig
      type key
      and 'a t
      val create : int -> 'Hweak.S.t
      val clear : 'Hweak.S.t -> unit
      val add : 'Hweak.S.t -> Hweak.S.key -> '-> unit
      val replace : 'Hweak.S.t -> Hweak.S.key -> '-> unit
      val remove : 'Hweak.S.t -> Hweak.S.key -> unit
      val merge : 'Hweak.S.t -> Hweak.S.key -> '-> 'a
      val find : 'Hweak.S.t -> Hweak.S.key -> 'a
      val find_all : 'Hweak.S.t -> Hweak.S.key -> 'a list
      val mem : 'Hweak.S.t -> Hweak.S.key -> bool
      val iter : (Hweak.S.key -> '-> unit) -> 'Hweak.S.t -> unit
      val fold : (Hweak.S.key -> '-> '-> 'b) -> 'Hweak.S.t -> '-> 'b
      val count : 'Hweak.S.t -> int
      val stats : 'Hweak.S.t -> int * int * int * int * int * int
    end
  module Make :
    functor (H : Hashtbl.HashedType->
      sig
        type key = H.t
        and 'a t
        val create : int -> 'Hweak.S.t
        val clear : 'Hweak.S.t -> unit
        val add : 'Hweak.S.t -> Hweak.S.key -> '-> unit
        val replace : 'Hweak.S.t -> Hweak.S.key -> '-> unit
        val remove : 'Hweak.S.t -> Hweak.S.key -> unit
        val merge : 'Hweak.S.t -> Hweak.S.key -> '-> 'a
        val find : 'Hweak.S.t -> Hweak.S.key -> 'a
        val find_all : 'Hweak.S.t -> Hweak.S.key -> 'a list
        val mem : 'Hweak.S.t -> Hweak.S.key -> bool
        val iter : (Hweak.S.key -> '-> unit) -> 'Hweak.S.t -> unit
        val fold :
          (Hweak.S.key -> '-> '-> 'b) -> 'Hweak.S.t -> '-> 'b
        val count : 'Hweak.S.t -> int
        val stats : 'Hweak.S.t -> int * int * int * int * int * int
      end
end