sig
  type ('key, 'data, +'z) any
  module Immutable :
    sig
      type ('key, 'data) t =
          ('key, 'data, Core.Std.immutable)
          Hashtbl.Access_control.any
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.t
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'a) ->
        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
      val bin_size_t : ('a, 'b, ('a, 'b) t) Bin_prot.Size.sizer2
      val bin_write_t : ('a, 'b, ('a, 'b) t) Bin_prot.Map_to_safe.writer2
      val bin_write_t_ : ('a, 'b, ('a, 'b) t) Bin_prot.Unsafe_write_c.writer2
      val bin_read_t : ('a, 'b, ('a, 'b) t) Bin_prot.Map_to_safe.reader2
      val bin_read_t_ : ('a, 'b, ('a, 'b) t) Bin_prot.Unsafe_read_c.reader2
      val bin_read_t__ :
        ('a, 'b, int -> ('a, 'b) t) Bin_prot.Unsafe_read_c.reader2
      val bin_writer_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.writer
      val bin_reader_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.reader
      val bin_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.t
    end
  module Read_only :
    sig
      type ('key, 'data) t =
          ('key, 'data, Core.Std.read_only)
          Hashtbl.Access_control.any
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.t
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'a) ->
        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
      val bin_size_t : ('a, 'b, ('a, 'b) t) Bin_prot.Size.sizer2
      val bin_write_t : ('a, 'b, ('a, 'b) t) Bin_prot.Map_to_safe.writer2
      val bin_write_t_ : ('a, 'b, ('a, 'b) t) Bin_prot.Unsafe_write_c.writer2
      val bin_read_t : ('a, 'b, ('a, 'b) t) Bin_prot.Map_to_safe.reader2
      val bin_read_t_ : ('a, 'b, ('a, 'b) t) Bin_prot.Unsafe_read_c.reader2
      val bin_read_t__ :
        ('a, 'b, int -> ('a, 'b) t) Bin_prot.Unsafe_read_c.reader2
      val bin_writer_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.writer
      val bin_reader_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.reader
      val bin_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.t
    end
  module Read_write :
    sig
      type ('key, 'data) t =
          ('key, 'data, Core.Std.read_write)
          Hashtbl.Access_control.any
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.t
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'a) ->
        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
      val bin_size_t : ('a, 'b, ('a, 'b) t) Bin_prot.Size.sizer2
      val bin_write_t : ('a, 'b, ('a, 'b) t) Bin_prot.Map_to_safe.writer2
      val bin_write_t_ : ('a, 'b, ('a, 'b) t) Bin_prot.Unsafe_write_c.writer2
      val bin_read_t : ('a, 'b, ('a, 'b) t) Bin_prot.Map_to_safe.reader2
      val bin_read_t_ : ('a, 'b, ('a, 'b) t) Bin_prot.Unsafe_read_c.reader2
      val bin_read_t__ :
        ('a, 'b, int -> ('a, 'b) t) Bin_prot.Unsafe_read_c.reader2
      val bin_writer_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.writer
      val bin_reader_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.reader
      val bin_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.t
    end
  val of_hashtbl :
    ('key, 'data) Core.Std.Hashtbl.t ->
    ('key, 'data, 'a) Hashtbl.Access_control.any
  val clear : ('a, 'b) Hashtbl.Access_control.Read_write.t -> unit
  val copy :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    ('a, 'b, 'd) Hashtbl.Access_control.any
  val fold :
    ('a, 'b, 'd) Hashtbl.Access_control.any ->
    init:'-> f:(key:'-> data:'-> '-> 'c) -> 'c
  val iter :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    f:(key:'-> data:'-> unit) -> unit
  val existsi :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    f:(key:'-> data:'-> bool) -> bool
  val exists :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    f:('-> bool) -> bool
  val length : ('a, 'b, 'c) Hashtbl.Access_control.any -> int
  val is_empty : ('a, 'b, 'c) Hashtbl.Access_control.any -> bool
  val mem : ('a, 'b, 'c) Hashtbl.Access_control.any -> '-> bool
  val remove :
    ('a, 'b) Hashtbl.Access_control.Read_write.t -> '-> unit
  val remove_one :
    ('a, 'b list) Hashtbl.Access_control.Read_write.t -> '-> unit
  val replace :
    ('a, 'b) Hashtbl.Access_control.Read_write.t ->
    key:'-> data:'-> unit
  val set :
    ('a, 'b) Hashtbl.Access_control.Read_write.t ->
    key:'-> data:'-> unit
  val add :
    ('a, 'b) Hashtbl.Access_control.Read_write.t ->
    key:'-> data:'-> [ `Duplicate | `Ok ]
  val add_exn :
    ('a, 'b) Hashtbl.Access_control.Read_write.t ->
    key:'-> data:'-> unit
  val change :
    ('a, 'b) Hashtbl.Access_control.Read_write.t ->
    '-> ('b option -> 'b option) -> unit
  val add_multi :
    ('a, 'b list) Hashtbl.Access_control.Read_write.t ->
    key:'-> data:'-> unit
  val map :
    ('a, 'b, 'd) Hashtbl.Access_control.any ->
    f:('-> 'c) -> ('a, 'c, 'e) Hashtbl.Access_control.any
  val mapi :
    ('a, 'b, 'd) Hashtbl.Access_control.any ->
    f:(key:'-> data:'-> 'c) ->
    ('a, 'c, 'e) Hashtbl.Access_control.any
  val filter_map :
    ('a, 'b, 'd) Hashtbl.Access_control.any ->
    f:('-> 'c option) -> ('a, 'c, 'e) Hashtbl.Access_control.any
  val filter_mapi :
    ('a, 'b, 'd) Hashtbl.Access_control.any ->
    f:(key:'-> data:'-> 'c option) ->
    ('a, 'c, 'e) Hashtbl.Access_control.any
  val filter :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    f:('-> bool) -> ('a, 'b, 'd) Hashtbl.Access_control.any
  val filteri :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    f:(key:'-> data:'-> bool) ->
    ('a, 'b, 'd) Hashtbl.Access_control.any
  val find_or_add :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    '-> default:(unit -> 'b) -> 'b
  val find :
    ('a, 'b, 'c) Hashtbl.Access_control.any -> '-> 'b option
  val find_exn : ('a, 'b, 'c) Hashtbl.Access_control.any -> '-> 'b
  val iter_vals :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    f:('-> unit) -> unit
  val merge :
    ('k, 'a, 'd) Hashtbl.Access_control.any ->
    ('k, 'b, 'e) Hashtbl.Access_control.any ->
    f:(key:'->
       [ `Both of 'a * '| `Left of '| `Right of 'b ] -> 'c option) ->
    ('k, 'c, 'f) Hashtbl.Access_control.any
  val merge_into :
    f:(key:'-> '-> 'b option -> 'b option) ->
    src:('a, 'b, 'c) Hashtbl.Access_control.any ->
    dst:('a, 'b) Hashtbl.Access_control.Read_write.t -> unit
  val keys : ('a, 'b, 'c) Hashtbl.Access_control.any -> 'a list
  val data : ('a, 'b, 'c) Hashtbl.Access_control.any -> 'b list
  val filter_inplace :
    ('a, 'b) Hashtbl.Access_control.Read_write.t ->
    f:('-> bool) -> unit
  val filteri_inplace :
    ('a, 'b) Hashtbl.Access_control.Read_write.t ->
    f:('-> '-> bool) -> unit
  val equal :
    ('a, 'b, 'c) Hashtbl.Access_control.any ->
    ('a, 'b, 'd) Hashtbl.Access_control.any ->
    ('-> '-> bool) -> bool
  val to_alist :
    ('a, 'b, 'c) Hashtbl.Access_control.any -> ('a * 'b) list
  val incr :
    ?by:int ->
    ('a, int) Hashtbl.Access_control.Read_write.t -> '-> unit
end