sig
  type ('a, 'b, 'c) t constraint 'c = [< `Read | `Write ]
  val create :
    int -> ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  external of_table :
    ('a, 'b) Hashtbl.t ->
    ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
    = "%identity"
  external to_table :
    ('a, 'b, [ `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a, 'b) Hashtbl.t = "%identity"
  external read_only :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a, 'b, [ `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t = "%identity"
  external write_only :
    ('a, 'b, [< `Read | `Write > `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a, 'b, [ `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t = "%identity"
  val length :
    ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t -> int
  val is_empty :
    ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t -> bool
  val add :
    ('a, 'b, [< `Read | `Write > `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> '-> unit
  val remove :
    ('a, 'b, [< `Read | `Write > `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> unit
  val remove_all :
    ('a, 'b, [< `Read | `Write > `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> unit
  val replace :
    ('a, 'b, [< `Read | `Write > `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> '-> unit
  val copy :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  val clear :
    ('a, 'b, [< `Read | `Write > `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    unit
  val find :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> 'b
  val find_all :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> 'b list
  val find_default :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> '-> 'b
  val find_option :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> 'b option
  val mem :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> bool
  val iter :
    ('-> '-> unit) ->
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    unit
  val fold :
    ('-> '-> '-> 'c) ->
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    '-> 'c
  val map :
    ('-> '-> 'c) ->
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a, 'c, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  val filter :
    ('-> bool) ->
    ('b, 'a, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('b, 'a, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  val filteri :
    ('-> '-> bool) ->
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  val filter_map :
    ('-> '-> 'c option) ->
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a, 'c, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  val keys :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    'Extlib.Enum.t
  val values :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    'Extlib.Enum.t
  val enum :
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    ('a * 'b) Extlib.Enum.t
  val of_enum :
    ('a * 'b) Extlib.Enum.t ->
    ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) ->
    (Sexplib.Sexp.t -> 'b) ->
    Sexplib.Sexp.t ->
    ('a, 'b, [< `Read | `Write ]) Extlib.ExtHashtbl.Hashtbl.Cap.t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) ->
    ('-> Sexplib.Sexp.t) ->
    ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    Sexplib.Sexp.t
  val print :
    ?first:string ->
    ?last:string ->
    ?sep:string ->
    ('Extlib.InnerIO.output -> '-> unit) ->
    ('Extlib.InnerIO.output -> '-> unit) ->
    'Extlib.InnerIO.output ->
    ('b, 'c, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
    unit
  module Exceptionless :
    sig
      val find :
        ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
        '-> 'b option
    end
  module Labels :
    sig
      val add :
        ('a, 'b, [< `Read | `Write > `Write ])
        Extlib.ExtHashtbl.Hashtbl.Cap.t -> key:'-> data:'-> unit
      val replace :
        ('a, 'b, [< `Read | `Write > `Write ])
        Extlib.ExtHashtbl.Hashtbl.Cap.t -> key:'-> data:'-> unit
      val iter :
        f:(key:'-> data:'-> unit) ->
        ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
        unit
      val fold :
        f:(key:'-> data:'-> '-> 'c) ->
        ('a, 'b, [< `Read | `Write > `Read ]) Extlib.ExtHashtbl.Hashtbl.Cap.t ->
        init:'-> 'c
    end
end