sig
  type ('a, +'b) t
  module T : sig type 'a key = 'type ('a, 'b) t = ('a, 'b) t end
  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 empty : ('a, 'b) Core_map_intf.S2.t
  val singleton : '-> '-> ('a, 'b) Core_map_intf.S2.t
  val is_empty : ('a, 'b) Core_map_intf.S2.t -> bool
  val cardinal : ('a, 'b) Core_map_intf.S2.t -> int
  val add :
    key:'->
    data:'-> ('a, 'b) Core_map_intf.S2.t -> ('a, 'b) Core_map_intf.S2.t
  val add_multi :
    key:'->
    data:'->
    ('a, 'b list) Core_map_intf.S2.t -> ('a, 'b list) Core_map_intf.S2.t
  val change :
    ('a, 'b) Core_map_intf.S2.t ->
    '-> ('b option -> 'b option) -> ('a, 'b) Core_map_intf.S2.t
  val find_exn : ('a, 'b) Core_map_intf.S2.t -> '-> 'b
  val find : ('a, 'b) Core_map_intf.S2.t -> '-> 'b option
  val remove :
    ('a, 'b) Core_map_intf.S2.t -> '-> ('a, 'b) Core_map_intf.S2.t
  val mem : ('a, 'b) Core_map_intf.S2.t -> '-> bool
  val iter :
    f:(key:'-> data:'-> unit) -> ('a, 'b) Core_map_intf.S2.t -> unit
  val map :
    f:('-> 'b) ->
    ('c, 'a) Core_map_intf.S2.t -> ('c, 'b) Core_map_intf.S2.t
  val mapi :
    f:(key:'-> data:'-> 'c) ->
    ('a, 'b) Core_map_intf.S2.t -> ('a, 'c) Core_map_intf.S2.t
  val fold :
    f:(key:'-> data:'-> '-> 'c) ->
    ('a, 'b) Core_map_intf.S2.t -> init:'-> 'c
  val fold_right :
    f:(key:'-> data:'-> '-> 'c) ->
    ('a, 'b) Core_map_intf.S2.t -> init:'-> 'c
  val filter :
    f:(key:'-> data:'-> bool) ->
    ('a, 'b) Core_map_intf.S2.t -> ('a, 'b) Core_map_intf.S2.t
  val filter_map :
    f:('-> 'b option) ->
    ('c, 'a) Core_map_intf.S2.t -> ('c, 'b) Core_map_intf.S2.t
  val filter_mapi :
    f:(key:'-> data:'-> 'c option) ->
    ('a, 'b) Core_map_intf.S2.t -> ('a, 'c) Core_map_intf.S2.t
  val compare :
    ('-> '-> int) ->
    ('b, 'a) Core_map_intf.S2.t -> ('b, 'a) Core_map_intf.S2.t -> int
  val equal :
    ('-> '-> bool) ->
    ('b, 'a) Core_map_intf.S2.t -> ('b, 'a) Core_map_intf.S2.t -> bool
  val keys : ('a, 'b) Core_map_intf.S2.t -> 'a list
  val has_key : ('a, 'b) Core_map_intf.S2.t -> '-> bool
  val data : ('a, 'b) Core_map_intf.S2.t -> 'b list
  val of_alist :
    ('a * 'b) list ->
    [ `Duplicate_key of '| `Ok of ('a, 'b) Core_map_intf.S2.t ]
  val of_alist_exn : ('a * 'b) list -> ('a, 'b) Core_map_intf.S2.t
  val of_alist_multi : ('a * 'b) list -> ('a, 'b list) Core_map_intf.S2.t
  val to_alist : ('a, 'b) Core_map_intf.S2.t -> ('a * 'b) list
  val combine_alist :
    ('a * 'b) list ->
    init:'-> f:('-> '-> 'c) -> ('a, 'c) Core_map_intf.S2.t
  val merge :
    f:(key:'-> 'b option -> 'c option -> 'd option) ->
    ('a, 'b) Core_map_intf.S2.t ->
    ('a, 'c) Core_map_intf.S2.t -> ('a, 'd) Core_map_intf.S2.t
  val min_elt : ('a, 'b) Core_map_intf.S2.t -> ('a * 'b) option
  val min_elt_exn : ('a, 'b) Core_map_intf.S2.t -> 'a * 'b
  val max_elt : ('a, 'b) Core_map_intf.S2.t -> ('a * 'b) option
  val max_elt_exn : ('a, 'b) Core_map_intf.S2.t -> 'a * 'b
  val for_all : f:('-> bool) -> ('b, 'a) Core_map_intf.S2.t -> bool
  val exists : f:('-> bool) -> ('b, 'a) Core_map_intf.S2.t -> bool
  val fold_range_inclusive :
    ('a, 'b) Core_map_intf.S2.t ->
    min:'-> max:'-> init:'-> f:(key:'-> data:'-> '-> 'c) -> 'c
  val range_to_alist :
    ('a, 'b) Core_map_intf.S2.t -> min:'-> max:'-> ('a * 'b) list
  val next_key : ('a, 'b) Core_map_intf.S2.t -> '-> 'a option
  val prev_key : ('a, 'b) Core_map_intf.S2.t -> '-> 'a option
  val rank : ('a, 'b) Core_map_intf.S2.t -> '-> int option
end