functor (T : T2->
  functor (Key : T1->
    sig
      module type S =
        sig
          val create : (unit -> ('a, 'b) T.t) Core_hashtbl_intf.with_options
          val of_alist :
            (('Core_hashtbl_intf.Key.t * 'b) list ->
             [ `Duplicate_key of 'Core_hashtbl_intf.Key.t
             | `Ok of ('a, 'b) T.t ])
            Core_hashtbl_intf.with_options
          val of_alist_exn :
            (('Core_hashtbl_intf.Key.t * 'b) list -> ('a, 'b) T.t)
            Core_hashtbl_intf.with_options
          val of_alist_multi :
            (('Core_hashtbl_intf.Key.t * 'b) list -> ('a, 'b list) T.t)
            Core_hashtbl_intf.with_options
          val create_mapped :
            (get_key:('-> 'Core_hashtbl_intf.Key.t) ->
             get_data:('-> 'c) -> 'a list -> ('b, 'c) T.t)
            Core_hashtbl_intf.with_options
          val create_with_key :
            (get_key:('-> 'Core_hashtbl_intf.Key.t) ->
             'a list -> ('b, 'a) T.t)
            Core_hashtbl_intf.with_options
          val group :
            (get_key:('-> 'Core_hashtbl_intf.Key.t) ->
             get_data:('-> 'c) ->
             combine:('-> '-> 'c) -> 'a list -> ('b, 'c) T.t)
            Core_hashtbl_intf.with_options
        end
    end