sig
  module Access_control :
    sig
      type ('key, 'data, +'z) any
      module Immutable :
        sig
          type ('key, 'data) t =
              ('key, 'data, Core.Std.immutable)
              Extended_hashtbl.Access_control.any
          val t_of_sexp :
            (Sexplib.Sexp.t -> 'a) ->
            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
          val sexp_of_t :
            ('-> Sexplib.Sexp.t) ->
            ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.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)
              Extended_hashtbl.Access_control.any
          val t_of_sexp :
            (Sexplib.Sexp.t -> 'a) ->
            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
          val sexp_of_t :
            ('-> Sexplib.Sexp.t) ->
            ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.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)
              Extended_hashtbl.Access_control.any
          val t_of_sexp :
            (Sexplib.Sexp.t -> 'a) ->
            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
          val sexp_of_t :
            ('-> Sexplib.Sexp.t) ->
            ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.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) Extended_hashtbl.Access_control.any
      val clear :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t -> unit
      val copy :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any
      val fold :
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any ->
        init:'-> f:(key:'-> data:'-> '-> 'c) -> 'c
      val iter :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        f:(key:'-> data:'-> unit) -> unit
      val existsi :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        f:(key:'-> data:'-> bool) -> bool
      val exists :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        f:('-> bool) -> bool
      val length : ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> int
      val is_empty : ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> bool
      val mem :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> '-> bool
      val remove :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t -> '-> unit
      val remove_one :
        ('a, 'b list) Extended_hashtbl.Access_control.Read_write.t ->
        '-> unit
      val replace :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t ->
        key:'-> data:'-> unit
      val set :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t ->
        key:'-> data:'-> unit
      val add :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t ->
        key:'-> data:'-> [ `Duplicate | `Ok ]
      val add_exn :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t ->
        key:'-> data:'-> unit
      val change :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t ->
        '-> ('b option -> 'b option) -> unit
      val add_multi :
        ('a, 'b list) Extended_hashtbl.Access_control.Read_write.t ->
        key:'-> data:'-> unit
      val map :
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any ->
        f:('-> 'c) -> ('a, 'c, 'e) Extended_hashtbl.Access_control.any
      val mapi :
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any ->
        f:(key:'-> data:'-> 'c) ->
        ('a, 'c, 'e) Extended_hashtbl.Access_control.any
      val filter_map :
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any ->
        f:('-> 'c option) ->
        ('a, 'c, 'e) Extended_hashtbl.Access_control.any
      val filter_mapi :
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any ->
        f:(key:'-> data:'-> 'c option) ->
        ('a, 'c, 'e) Extended_hashtbl.Access_control.any
      val filter :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        f:('-> bool) -> ('a, 'b, 'd) Extended_hashtbl.Access_control.any
      val filteri :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        f:(key:'-> data:'-> bool) ->
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any
      val find_or_add :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        '-> default:(unit -> 'b) -> 'b
      val find :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> '-> 'b option
      val find_exn :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> '-> 'b
      val iter_vals :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        f:('-> unit) -> unit
      val merge :
        ('k, 'a, 'd) Extended_hashtbl.Access_control.any ->
        ('k, 'b, 'e) Extended_hashtbl.Access_control.any ->
        f:(key:'->
           [ `Both of 'a * '| `Left of '| `Right of 'b ] -> 'c option) ->
        ('k, 'c, 'f) Extended_hashtbl.Access_control.any
      val merge_into :
        f:(key:'-> '-> 'b option -> 'b option) ->
        src:('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        dst:('a, 'b) Extended_hashtbl.Access_control.Read_write.t -> unit
      val keys : ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> 'a list
      val data : ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> 'b list
      val filter_inplace :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t ->
        f:('-> bool) -> unit
      val filteri_inplace :
        ('a, 'b) Extended_hashtbl.Access_control.Read_write.t ->
        f:('-> '-> bool) -> unit
      val equal :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any ->
        ('a, 'b, 'd) Extended_hashtbl.Access_control.any ->
        ('-> '-> bool) -> bool
      val to_alist :
        ('a, 'b, 'c) Extended_hashtbl.Access_control.any -> ('a * 'b) list
      val incr :
        ?by:int ->
        ('a, int) Extended_hashtbl.Access_control.Read_write.t -> '-> unit
    end
  val ounit_tests : unit -> OUnit.test
end