sig
  val add : ('a, 'b) BatHashtbl.t -> key:'-> data:'-> unit
  val replace : ('a, 'b) BatHashtbl.t -> key:'-> data:'-> unit
  val iter : f:(key:'-> data:'-> unit) -> ('a, 'b) BatHashtbl.t -> unit
  val for_all :
    f:(key:'-> data:'-> bool) -> ('a, 'b) BatHashtbl.t -> bool
  val map :
    f:(key:'-> data:'-> 'c) ->
    ('a, 'b) BatHashtbl.t -> ('a, 'c) BatHashtbl.t
  val map_inplace :
    f:(key:'-> data:'-> 'b) -> ('a, 'b) BatHashtbl.t -> unit
  val filter :
    f:('-> bool) -> ('key, 'a) BatHashtbl.t -> ('key, 'a) BatHashtbl.t
  val filter_inplace : f:('-> bool) -> ('key, 'a) BatHashtbl.t -> unit
  val filteri :
    f:(key:'key -> data:'-> bool) ->
    ('key, 'a) BatHashtbl.t -> ('key, 'a) BatHashtbl.t
  val filteri_inplace :
    f:(key:'key -> data:'-> bool) -> ('key, 'a) BatHashtbl.t -> unit
  val filter_map :
    f:(key:'key -> data:'-> 'b option) ->
    ('key, 'a) BatHashtbl.t -> ('key, 'b) BatHashtbl.t
  val filter_map_inplace :
    f:(key:'key -> data:'-> 'a option) -> ('key, 'a) BatHashtbl.t -> unit
  val fold :
    f:(key:'-> data:'-> '-> 'c) ->
    ('a, 'b) BatHashtbl.t -> init:'-> 'c
  val exists : f:(key:'-> data:'-> bool) -> ('a, 'b) BatHashtbl.t -> bool
  val modify : key:'-> f:('-> 'b) -> ('a, 'b) BatHashtbl.t -> unit
  val modify_def :
    default:'-> key:'-> f:('-> 'b) -> ('a, 'b) BatHashtbl.t -> unit
  val modify_opt :
    key:'-> f:('b option -> 'b option) -> ('a, 'b) BatHashtbl.t -> unit
  val merge :
    f:('-> 'b option -> 'c option -> 'd option) ->
    left:('a, 'b) BatHashtbl.t ->
    right:('a, 'c) BatHashtbl.t -> ('a, 'd) BatHashtbl.t
  val merge_all :
    f:('-> 'b list -> 'c list -> 'd list) ->
    left:('a, 'b) BatHashtbl.t ->
    right:('a, 'c) BatHashtbl.t -> ('a, 'd) BatHashtbl.t
end