functor (T : T2->
  functor (Key : T1->
    sig
      module type S =
        sig
          val clear : ('a, 'b) T.t -> unit
          val copy : ('a, 'b) T.t -> ('a, 'b) T.t
          val invariant : ('a, 'b) T.t -> unit
          val fold :
            ('a, 'b) T.t ->
            init:'->
            f:(key:'Core_hashtbl_intf.Key.t -> data:'-> '-> 'c) -> 'c
          val iter :
            ('a, 'b) T.t ->
            f:(key:'Core_hashtbl_intf.Key.t -> data:'-> unit) -> unit
          val existsi :
            ('a, 'b) T.t ->
            f:(key:'Core_hashtbl_intf.Key.t -> data:'-> bool) -> bool
          val exists : ('a, 'b) T.t -> f:('-> bool) -> bool
          val length : ('a, 'b) T.t -> int
          val is_empty : ('a, 'b) T.t -> bool
          val mem : ('a, 'b) T.t -> 'Core_hashtbl_intf.Key.t -> bool
          val remove : ('a, 'b) T.t -> 'Core_hashtbl_intf.Key.t -> unit
          val remove_one :
            ('a, 'b list) T.t -> 'Core_hashtbl_intf.Key.t -> unit
          val replace :
            ('a, 'b) T.t -> key:'Core_hashtbl_intf.Key.t -> data:'-> unit
          val change :
            ('a, 'b) T.t ->
            'Core_hashtbl_intf.Key.t -> ('b option -> 'b option) -> unit
          val add_multi :
            ('a, 'b list) T.t ->
            key:'Core_hashtbl_intf.Key.t -> data:'-> unit
          val map : ('a, 'b) T.t -> f:('-> 'c) -> ('a, 'c) T.t
          val mapi :
            ('a, 'b) T.t ->
            f:(key:'Core_hashtbl_intf.Key.t -> data:'-> 'c) ->
            ('a, 'c) T.t
          val filter_map :
            ('a, 'b) T.t -> f:('-> 'c option) -> ('a, 'c) T.t
          val filter_mapi :
            ('a, 'b) T.t ->
            f:(key:'Core_hashtbl_intf.Key.t -> data:'-> 'c option) ->
            ('a, 'c) T.t
          val filter : ('a, 'b) T.t -> f:('-> bool) -> ('a, 'b) T.t
          val filteri :
            ('a, 'b) T.t ->
            f:(key:'Core_hashtbl_intf.Key.t -> data:'-> bool) ->
            ('a, 'b) T.t
          val find_or_add :
            ('a, 'b) T.t ->
            'Core_hashtbl_intf.Key.t -> default:(unit -> 'b) -> 'b
          val find : ('a, 'b) T.t -> 'Core_hashtbl_intf.Key.t -> 'b option
          val find_exn : ('a, 'b) T.t -> 'Core_hashtbl_intf.Key.t -> 'b
          val iter_vals : ('a, 'b) T.t -> f:('-> unit) -> unit
          val merge :
            f:(key:'Core_hashtbl_intf.Key.t ->
               'b option -> 'c option -> 'd option) ->
            ('a, 'b) T.t -> ('a, 'c) T.t -> ('a, 'd) T.t
          val merge_into :
            f:(key:'Core_hashtbl_intf.Key.t -> '-> 'b option -> 'b option) ->
            src:('a, 'b) T.t -> dst:('a, 'b) T.t -> unit
          val keys : ('a, 'b) T.t -> 'Core_hashtbl_intf.Key.t list
          val data : ('a, 'b) T.t -> 'b list
          val filter_inplace : ('a, 'b) T.t -> f:('-> bool) -> unit
          val filteri_inplace :
            ('a, 'b) T.t ->
            f:('Core_hashtbl_intf.Key.t -> '-> bool) -> unit
          val equal :
            ('a, 'b) T.t -> ('a, 'b) T.t -> ('-> '-> bool) -> bool
          val to_alist :
            ('a, 'b) T.t -> ('Core_hashtbl_intf.Key.t * 'b) list
          val incr :
            ?by:int -> ('a, int) T.t -> 'Core_hashtbl_intf.Key.t -> unit
        end
    end