functor
  (Key : sig
           type t
           val compare : t -> t -> int
           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
    module Key : sig type t = Key.t end
    val hashable : Key.t Core_hashtbl_intf.hashable
    type 'a t = (Key.t, 'a) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val clear : ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t -> unit
    val copy :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val invariant :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t -> unit
    val fold :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      init:'->
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
         data:'-> '-> 'c) ->
      'c
    val iter :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
         data:'-> unit) ->
      unit
    val existsi :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
         data:'-> bool) ->
      bool
    val exists :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:('-> bool) -> bool
    val length : ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t -> int
    val is_empty : ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t -> bool
    val mem :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> bool
    val remove :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> unit
    val remove_one :
      ('a, 'b list) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> unit
    val replace :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> data:'-> unit
    val change :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
      ('b option -> 'b option) -> unit
    val add_multi :
      ('a, 'b list) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> data:'-> unit
    val map :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:('-> 'c) -> ('a, 'c) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val mapi :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> data:'-> 'c) ->
      ('a, 'c) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val filter_map :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:('-> 'c option) ->
      ('a, 'c) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val filter_mapi :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
         data:'-> 'c option) ->
      ('a, 'c) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val filter :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:('-> bool) -> ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val filteri :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
         data:'-> bool) ->
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val find_or_add :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
      default:(unit -> 'b) -> 'b
    val find :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> 'b option
    val find_exn :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> 'b
    val iter_vals :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:('-> unit) -> unit
    val merge :
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
         'b option -> 'c option -> 'd option) ->
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      ('a, 'c) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      ('a, 'd) Core_hashtbl_intf.Monomorphic(T)(Key).T.t
    val merge_into :
      f:(key:'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t ->
         '-> 'b option -> 'b option) ->
      src:('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      dst:('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t -> unit
    val keys :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t list
    val data : ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t -> 'b list
    val filter_inplace :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:('-> bool) -> unit
    val filteri_inplace :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      f:('Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> '-> bool) ->
      unit
    val equal :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      ('-> '-> bool) -> bool
    val to_alist :
      ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      ('Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t * 'b) list
    val incr :
      ?by:int ->
      ('a, int) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ->
      'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t -> unit
    val create :
      (unit -> ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t)
      Core_hashtbl_intf.with_options
    val of_alist :
      (('Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t * 'b) list ->
       [ `Duplicate_key of 'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t
       | `Ok of ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t ])
      Core_hashtbl_intf.with_options
    val of_alist_exn :
      (('Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t * 'b) list ->
       ('a, 'b) Core_hashtbl_intf.Monomorphic(T)(Key).T.t)
      Core_hashtbl_intf.with_options
    val of_alist_multi :
      (('Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t * 'b) list ->
       ('a, 'b list) Core_hashtbl_intf.Monomorphic(T)(Key).T.t)
      Core_hashtbl_intf.with_options
    val create_mapped :
      (get_key:('-> 'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t) ->
       get_data:('-> 'c) ->
       'a list -> ('b, 'c) Core_hashtbl_intf.Monomorphic(T)(Key).T.t)
      Core_hashtbl_intf.with_options
    val create_with_key :
      (get_key:('-> 'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t) ->
       'a list -> ('b, 'a) Core_hashtbl_intf.Monomorphic(T)(Key).T.t)
      Core_hashtbl_intf.with_options
    val group :
      (get_key:('-> 'Core_hashtbl_intf.Monomorphic(T)(Key).Key1.t) ->
       get_data:('-> 'c) ->
       combine:('-> '-> 'c) ->
       'a list -> ('b, 'c) Core_hashtbl_intf.Monomorphic(T)(Key).T.t)
      Core_hashtbl_intf.with_options
    type 'a sexpable = 'a t
    val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a sexpable -> Sexplib.Sexp.t
    val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a sexpable
    type 'a binable = 'a t
    val bin_size_t : ('a, 'a binable) Bin_prot.Size.sizer1
    val bin_write_t : ('a, 'a binable) Bin_prot.Map_to_safe.writer1
    val bin_write_t_ : ('a, 'a binable) Bin_prot.Unsafe_write_c.writer1
    val bin_read_t : ('a, 'a binable) Bin_prot.Map_to_safe.reader1
    val bin_read_t_ : ('a, 'a binable) Bin_prot.Unsafe_read_c.reader1
    val bin_read_t__ : ('a, int -> 'a binable) Bin_prot.Unsafe_read_c.reader1
    val bin_writer_t : ('a, 'a binable) Bin_prot.Type_class.S1.writer
    val bin_reader_t : ('a, 'a binable) Bin_prot.Type_class.S1.reader
    val bin_t : ('a, 'a binable) Bin_prot.Type_class.S1.t
  end