sig
  type ('a, 'b) t = ('a, 'b) MoreLabels.Hashtbl.t
  module T : sig type 'a key = 'type ('a, 'b) t = ('a, 'b) t end
  val shadow_add :
    ('a, 'b) Hashtbl_intf.S2.t -> key:'-> data:'-> unit
  val clear : ('a, 'b) Hashtbl_intf.S2.t -> unit
  val copy :
    ('a, 'b) Hashtbl_intf.S2.t -> ('a, 'b) Hashtbl_intf.S2.t
  val create : int -> ('a, 'b) Hashtbl_intf.S2.t
  val shadow_find : ('a, 'b) Hashtbl_intf.S2.t -> '-> 'b list
  val fold :
    ('a, 'b) Hashtbl_intf.S2.t ->
    init:'-> f:(key:'-> data:'-> '-> 'c) -> 'c
  val iter :
    ('a, 'b) Hashtbl_intf.S2.t -> f:(key:'-> data:'-> unit) -> unit
  val length : ('a, 'b) Hashtbl_intf.S2.t -> int
  val mem : ('a, 'b) Hashtbl_intf.S2.t -> '-> bool
  val remove : ('a, 'b) Hashtbl_intf.S2.t -> '-> unit
  val replace : ('a, 'b) Hashtbl_intf.S2.t -> key:'-> data:'-> unit
  val map :
    ('a, 'b) Hashtbl_intf.S2.t ->
    f:('-> 'c) -> ('a, 'c) Hashtbl_intf.S2.t
  val mapi :
    ('a, 'b) Hashtbl_intf.S2.t ->
    f:(key:'-> data:'-> 'c) -> ('a, 'c) Hashtbl_intf.S2.t
  val filter_map :
    ('a, 'b) Hashtbl_intf.S2.t ->
    f:('-> 'c option) -> ('a, 'c) Hashtbl_intf.S2.t
  val filter_mapi :
    ('a, 'b) Hashtbl_intf.S2.t ->
    f:(key:'-> data:'-> 'c option) -> ('a, 'c) Hashtbl_intf.S2.t
  val remove_all : ('a, 'b) Hashtbl_intf.S2.t -> '-> unit
  val find_default :
    ('a, 'b) Hashtbl_intf.S2.t -> '-> default:(unit -> 'b) -> 'b
  val find : ('a, 'b) Hashtbl_intf.S2.t -> '-> 'b option
  val find_exn : ('a, 'b) Hashtbl_intf.S2.t -> '-> 'b
  val iter_vals : ('a, 'b) Hashtbl_intf.S2.t -> f:('-> unit) -> unit
  val of_alist :
    ('a * 'b) list ->
    [ `Duplicate_key of '| `Ok of ('a, 'b) Hashtbl_intf.S2.t ]
  val of_alist_exn : ('a * 'b) list -> ('a, 'b) Hashtbl_intf.S2.t
  val of_alist_shadow :
    ('a * 'b) list -> ('a, 'b list) Hashtbl_intf.S2.t
  val to_alist : ('a, 'b) Hashtbl_intf.S2.t -> ('a * 'b) list
  val to_alist_shadow :
    ('a, 'b) Hashtbl_intf.S2.t -> ('a * 'b list) list
  val merge :
    f:(key:'-> 'b option -> 'c option -> 'd option) ->
    ('a, 'b) Hashtbl_intf.S2.t ->
    ('a, 'c) Hashtbl_intf.S2.t -> ('a, 'd) Hashtbl_intf.S2.t
  val keys : ('a, 'b) Hashtbl_intf.S2.t -> 'a list
  val data : ('a, 'b) Hashtbl_intf.S2.t -> 'b list
  val filter_inplace :
    ('a, 'b) Hashtbl_intf.S2.t -> f:('-> bool) -> unit
  val filteri_inplace :
    ('a, 'b) Hashtbl_intf.S2.t -> f:('-> '-> bool) -> unit
  val equal :
    ('a, 'b) Hashtbl_intf.S2.t ->
    ('a, 'b) Hashtbl_intf.S2.t -> ('-> '-> bool) -> bool
  val add_to_groups :
    ('a, 'b) Hashtbl_intf.S2.t ->
    get_key:('-> 'a) ->
    get_data:('-> 'b) -> combine:('-> '-> 'b) -> rows:'c list -> unit
  val group :
    ?size:int ->
    get_key:('-> 'b) ->
    get_data:('-> 'c) ->
    combine:('-> '-> 'c) -> 'a list -> ('b, 'c) Hashtbl_intf.S2.t
  val create_mapped :
    get_key:('-> 'b) ->
    get_data:('-> 'c) -> 'a list -> ('b, 'c) Hashtbl_intf.S2.t
  val create_with_key :
    get_key:('-> 'b) -> 'a list -> ('b, 'a) Hashtbl_intf.S2.t
  type ('a, 'b) sexpable = ('a, 'b) t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) ->
    ('-> Sexplib.Sexp.t) -> ('a, 'b) sexpable -> Sexplib.Sexp.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) ->
    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) sexpable
end