sig
  type key = HashedBits.t
  type 'a t = 'BatHashtbl.Make(HashedBits).t
  val create : int -> 'a t
  val length : 'a t -> int
  val is_empty : 'a t -> bool
  val clear : 'a t -> unit
  val copy : 'a t -> 'a t
  val add : 'a t -> key -> '-> unit
  val remove : 'a t -> key -> unit
  val remove_all : 'a t -> key -> unit
  val find : 'a t -> key -> 'a
  val find_all : 'a t -> key -> 'a list
  val find_default : 'a t -> key -> '-> 'a
  val find_option : 'a t -> key -> 'a option
  val replace : 'a t -> key -> '-> unit
  val mem : 'a t -> key -> bool
  val iter : (key -> '-> unit) -> 'a t -> unit
  val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
  val map : (key -> '-> 'c) -> 'b t -> 'c t
  val map_inplace : (key -> '-> 'a) -> 'a t -> unit
  val filter : ('-> bool) -> 'a t -> 'a t
  val filter_inplace : ('-> bool) -> 'a t -> unit
  val filteri : (key -> '-> bool) -> 'a t -> 'a t
  val filteri_inplace : (key -> '-> bool) -> 'a t -> unit
  val filter_map : (key -> '-> 'b option) -> 'a t -> 'b t
  val filter_map_inplace : (key -> '-> 'a option) -> 'a t -> unit
  val modify : key -> ('-> 'a) -> 'a t -> unit
  val modify_def : '-> key -> ('-> 'a) -> 'a t -> unit
  val modify_opt : key -> ('a option -> 'a option) -> 'a t -> unit
  val keys : 'a t -> key BatEnum.t
  val values : 'a t -> 'BatEnum.t
  val enum : 'a t -> (key * 'a) BatEnum.t
  val of_enum : (key * 'a) BatEnum.t -> 'a t
  val print :
    ?first:string ->
    ?last:string ->
    ?sep:string ->
    ('BatInnerIO.output -> key -> unit) ->
    ('BatInnerIO.output -> '-> unit) ->
    'BatInnerIO.output -> 'b t -> unit
  module Exceptionless :
    sig
      val find : 'a t -> key -> 'a option
      val modify :
        key -> ('-> 'a) -> 'a t -> (unit, exn) BatPervasives.result
    end
  module Infix :
    sig
      val ( --> ) : 'a t -> key -> 'a
      val ( <-- ) : 'a t -> key * '-> unit
    end
  module Labels :
    sig
      val add : 'a t -> key:key -> data:'-> unit
      val replace : 'a t -> key:key -> data:'-> unit
      val iter : f:(key:key -> data:'-> unit) -> 'a t -> unit
      val map : f:(key:key -> data:'-> 'b) -> 'a t -> 'b t
      val map_inplace : f:(key:key -> data:'-> 'a) -> 'a t -> unit
      val filter : f:('-> bool) -> 'a t -> 'a t
      val filter_inplace : f:('-> bool) -> 'a t -> unit
      val filteri : f:(key:key -> data:'-> bool) -> 'a t -> 'a t
      val filteri_inplace : f:(key:key -> data:'-> bool) -> 'a t -> unit
      val filter_map : f:(key:key -> data:'-> 'b option) -> 'a t -> 'b t
      val filter_map_inplace :
        f:(key:key -> data:'-> 'a option) -> 'a t -> unit
      val fold : f:(key:key -> data:'-> '-> 'b) -> 'a t -> init:'-> 'b
      val modify : key:key -> f:('-> 'a) -> 'a t -> unit
      val modify_def : default:'-> key:key -> f:('-> 'a) -> 'a t -> unit
      val modify_opt : key:key -> f:('a option -> 'a option) -> 'a t -> unit
    end
end