sig
  type ('a, 'b) binable = ('a, 'b) t
  val bin_size_t : ('a, 'b, ('a, 'b) binable) Bin_prot.Size.sizer2
  val bin_write_t : ('a, 'b, ('a, 'b) binable) Bin_prot.Map_to_safe.writer2
  val bin_write_t_ :
    ('a, 'b, ('a, 'b) binable) Bin_prot.Unsafe_write_c.writer2
  val bin_read_t : ('a, 'b, ('a, 'b) binable) Bin_prot.Map_to_safe.reader2
  val bin_read_t_ : ('a, 'b, ('a, 'b) binable) Bin_prot.Unsafe_read_c.reader2
  val bin_read_t__ :
    ('a, 'b, int -> ('a, 'b) binable) Bin_prot.Unsafe_read_c.reader2
  val bin_writer_t : ('a, 'b, ('a, 'b) binable) Bin_prot.Type_class.S2.writer
  val bin_reader_t : ('a, 'b, ('a, 'b) binable) Bin_prot.Type_class.S2.reader
  val bin_t : ('a, 'b, ('a, 'b) binable) Bin_prot.Type_class.S2.t
  type ('a, 'b) sexpable = ('a, 'b) t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) ->
    ('-> Sexplib.Sexp.t) -> ('a, 'b) sexpable -> Sexplib.Sexp.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) ->
    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) sexpable
  val create : (unit -> ('a, 'b) T.t) Core_hashtbl_intf.with_options
  val of_alist :
    (('Core_hashtbl_intf.Key_poly.t * 'b) list ->
     [ `Duplicate_key of 'Core_hashtbl_intf.Key_poly.t
     | `Ok of ('a, 'b) T.t ])
    Core_hashtbl_intf.with_options
  val of_alist_exn :
    (('Core_hashtbl_intf.Key_poly.t * 'b) list -> ('a, 'b) T.t)
    Core_hashtbl_intf.with_options
  val of_alist_multi :
    (('Core_hashtbl_intf.Key_poly.t * 'b) list -> ('a, 'b list) T.t)
    Core_hashtbl_intf.with_options
  val create_mapped :
    (get_key:('-> 'Core_hashtbl_intf.Key_poly.t) ->
     get_data:('-> 'c) -> 'a list -> ('b, 'c) T.t)
    Core_hashtbl_intf.with_options
  val create_with_key :
    (get_key:('-> 'Core_hashtbl_intf.Key_poly.t) ->
     'a list -> ('b, 'a) T.t)
    Core_hashtbl_intf.with_options
  val group :
    (get_key:('-> 'Core_hashtbl_intf.Key_poly.t) ->
     get_data:('-> 'c) ->
     combine:('-> '-> 'c) -> 'a list -> ('b, 'c) T.t)
    Core_hashtbl_intf.with_options
end