sig
  type ('a, 'b, 'c) map = ('a, 'b, 'c) Map.t
  type ('a, 'b, 'c) tree = ('a, 'b, 'c) Map.Poly.tree
  type ('a, 'b) t = ('a, 'b, Comparator.Poly.comparator) Map.Poly.map
  type ('a, 'b, 'c) t_ = ('a, 'b) Map.Poly.t
  type 'a key = 'a
  type ('a, 'b, 'c) options = ('a, 'b, 'c) Core_map_intf.without_comparator
  val singleton :
    ('k, 'comparator, 'k key -> '-> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val of_sorted_array :
    ('k, 'comparator,
     ('k key * 'v) array -> ('k, 'v, 'comparator) t_ Or_error.t)
    Core_map_intf.without_comparator
  val of_sorted_array_unchecked :
    ('k, 'comparator, ('k key * 'v) array -> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val of_alist :
    ('k, 'comparator,
     ('k key * 'v) list ->
     [ `Duplicate_key of 'k key | `Ok of ('k, 'v, 'comparator) t_ ])
    Core_map_intf.without_comparator
  val of_alist_exn :
    ('k, 'comparator, ('k key * 'v) list -> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val of_alist_multi :
    ('k, 'comparator, ('k key * 'v) list -> ('k, 'v list, 'comparator) t_)
    Core_map_intf.without_comparator
  val of_alist_fold :
    ('k, 'comparator,
     ('k key * 'v1) list ->
     init:'v2 -> f:('v2 -> 'v1 -> 'v2) -> ('k, 'v2, 'comparator) t_)
    Core_map_intf.without_comparator
  val of_tree :
    ('k, 'comparator,
     ('k key, 'v, 'comparator) tree -> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val invariants :
    ('k, 'comparator, ('k, 'v, 'comparator) t_ -> bool)
    Core_map_intf.without_comparator
  val is_empty : ('a, 'b, 'c) t_ -> bool
  val length : ('a, 'b, 'c) t_ -> int
  val add :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ ->
     key:'k key -> data:'-> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val add_multi :
    ('k, 'comparator,
     ('k, 'v list, 'comparator) t_ ->
     key:'k key -> data:'-> ('k, 'v list, 'comparator) t_)
    Core_map_intf.without_comparator
  val change :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ ->
     'k key -> ('v option -> 'v option) -> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val find :
    ('k, 'comparator, ('k, 'v, 'comparator) t_ -> 'k key -> 'v option)
    Core_map_intf.without_comparator
  val find_exn :
    ('k, 'comparator, ('k, 'v, 'comparator) t_ -> 'k key -> 'v)
    Core_map_intf.without_comparator
  val remove :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ -> 'k key -> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val mem :
    ('k, 'comparator, ('k, 'a, 'comparator) t_ -> 'k key -> bool)
    Core_map_intf.without_comparator
  val iter : ('k, 'v, 'a) t_ -> f:(key:'k key -> data:'-> unit) -> unit
  val iter2 :
    ('k, 'comparator,
     ('k, 'v1, 'comparator) t_ ->
     ('k, 'v2, 'comparator) t_ ->
     f:(key:'k key ->
        data:[ `Both of 'v1 * 'v2 | `Left of 'v1 | `Right of 'v2 ] -> unit) ->
     unit)
    Core_map_intf.without_comparator
  val map :
    ('k, 'v1, 'comparator) t_ -> f:('v1 -> 'v2) -> ('k, 'v2, 'comparator) t_
  val mapi :
    ('k, 'v1, 'comparator) t_ ->
    f:(key:'k key -> data:'v1 -> 'v2) -> ('k, 'v2, 'comparator) t_
  val fold :
    ('k, 'v, 'b) t_ -> init:'-> f:(key:'k key -> data:'-> '-> 'a) -> 'a
  val fold_right :
    ('k, 'v, 'b) t_ -> init:'-> f:(key:'k key -> data:'-> '-> 'a) -> 'a
  val filter :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ ->
     f:(key:'k key -> data:'-> bool) -> ('k, 'v, 'comparator) t_)
    Core_map_intf.without_comparator
  val filter_map :
    ('k, 'comparator,
     ('k, 'v1, 'comparator) t_ ->
     f:('v1 -> 'v2 option) -> ('k, 'v2, 'comparator) t_)
    Core_map_intf.without_comparator
  val filter_mapi :
    ('k, 'comparator,
     ('k, 'v1, 'comparator) t_ ->
     f:(key:'k key -> data:'v1 -> 'v2 option) -> ('k, 'v2, 'comparator) t_)
    Core_map_intf.without_comparator
  val compare_direct :
    ('k, 'comparator,
     ('-> '-> int) ->
     ('k, 'v, 'comparator) t_ -> ('k, 'v, 'comparator) t_ -> int)
    Core_map_intf.without_comparator
  val equal :
    ('k, 'comparator,
     ('-> '-> bool) ->
     ('k, 'v, 'comparator) t_ -> ('k, 'v, 'comparator) t_ -> bool)
    Core_map_intf.without_comparator
  val keys : ('k, 'a, 'b) t_ -> 'k key list
  val data : ('a, 'v, 'b) t_ -> 'v list
  val to_alist : ('k, 'v, 'a) t_ -> ('k key * 'v) list
  val merge :
    ('k, 'comparator,
     ('k, 'v1, 'comparator) t_ ->
     ('k, 'v2, 'comparator) t_ ->
     f:(key:'k key ->
        [ `Both of 'v1 * 'v2 | `Left of 'v1 | `Right of 'v2 ] -> 'v3 option) ->
     ('k, 'v3, 'comparator) t_)
    Core_map_intf.without_comparator
  val symmetric_diff :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ ->
     ('k, 'v, 'comparator) t_ ->
     data_equal:('-> '-> bool) ->
     ('k key * [ `Left of '| `Right of '| `Unequal of 'v * 'v ]) list)
    Core_map_intf.without_comparator
  val min_elt : ('k, 'v, 'a) t_ -> ('k key * 'v) option
  val min_elt_exn : ('k, 'v, 'a) t_ -> 'k key * 'v
  val max_elt : ('k, 'v, 'a) t_ -> ('k key * 'v) option
  val max_elt_exn : ('k, 'v, 'a) t_ -> 'k key * 'v
  val for_all : ('k, 'v, 'a) t_ -> f:('-> bool) -> bool
  val exists : ('k, 'v, 'a) t_ -> f:('-> bool) -> bool
  val fold_range_inclusive :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ ->
     min:'k key ->
     max:'k key -> init:'-> f:(key:'k key -> data:'-> '-> 'a) -> 'a)
    Core_map_intf.without_comparator
  val range_to_alist :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ ->
     min:'k key -> max:'k key -> ('k key * 'v) list)
    Core_map_intf.without_comparator
  val prev_key :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ -> 'k key -> ('k key * 'v) option)
    Core_map_intf.without_comparator
  val next_key :
    ('k, 'comparator,
     ('k, 'v, 'comparator) t_ -> 'k key -> ('k key * 'v) option)
    Core_map_intf.without_comparator
  val rank :
    ('k, 'comparator, ('k, 'v, 'comparator) t_ -> 'k key -> int option)
    Core_map_intf.without_comparator
  val to_tree : ('k, 'v, 'comparator) t_ -> ('k key, 'v, 'comparator) tree
  val empty : ('a, 'b) Map.Poly.t
  module Tree :
    sig
      type ('k, 'v) t =
          ('k, 'v, Comparator.Poly.comparator) Map.Poly.tree
      val empty :
        ('k, 'comparator, ('k, 'a, 'comparator) tree)
        Core_map_intf.without_comparator
      val singleton :
        ('k, 'comparator, 'k key -> '-> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val of_sorted_array :
        ('k, 'comparator,
         ('k key * 'v) array -> ('k, 'v, 'comparator) tree Or_error.t)
        Core_map_intf.without_comparator
      val of_sorted_array_unchecked :
        ('k, 'comparator, ('k key * 'v) array -> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val of_alist :
        ('k, 'comparator,
         ('k key * 'v) list ->
         [ `Duplicate_key of 'k key | `Ok of ('k, 'v, 'comparator) tree ])
        Core_map_intf.without_comparator
      val of_alist_exn :
        ('k, 'comparator, ('k key * 'v) list -> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val of_alist_multi :
        ('k, 'comparator,
         ('k key * 'v) list -> ('k, 'v list, 'comparator) tree)
        Core_map_intf.without_comparator
      val of_alist_fold :
        ('k, 'comparator,
         ('k key * 'v1) list ->
         init:'v2 -> f:('v2 -> 'v1 -> 'v2) -> ('k, 'v2, 'comparator) tree)
        Core_map_intf.without_comparator
      val of_tree :
        ('k, 'comparator,
         ('k key, 'v, 'comparator) tree -> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val invariants :
        ('k, 'comparator, ('k, 'v, 'comparator) tree -> bool)
        Core_map_intf.without_comparator
      val is_empty : ('a, 'b, 'c) tree -> bool
      val length : ('a, 'b, 'c) tree -> int
      val add :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree ->
         key:'k key -> data:'-> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val add_multi :
        ('k, 'comparator,
         ('k, 'v list, 'comparator) tree ->
         key:'k key -> data:'-> ('k, 'v list, 'comparator) tree)
        Core_map_intf.without_comparator
      val change :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree ->
         'k key -> ('v option -> 'v option) -> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val find :
        ('k, 'comparator, ('k, 'v, 'comparator) tree -> 'k key -> 'v option)
        Core_map_intf.without_comparator
      val find_exn :
        ('k, 'comparator, ('k, 'v, 'comparator) tree -> 'k key -> 'v)
        Core_map_intf.without_comparator
      val remove :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree -> 'k key -> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val mem :
        ('k, 'comparator, ('k, 'a, 'comparator) tree -> 'k key -> bool)
        Core_map_intf.without_comparator
      val iter :
        ('k, 'v, 'a) tree -> f:(key:'k key -> data:'-> unit) -> unit
      val iter2 :
        ('k, 'comparator,
         ('k, 'v1, 'comparator) tree ->
         ('k, 'v2, 'comparator) tree ->
         f:(key:'k key ->
            data:[ `Both of 'v1 * 'v2 | `Left of 'v1 | `Right of 'v2 ] ->
            unit) ->
         unit)
        Core_map_intf.without_comparator
      val map :
        ('k, 'v1, 'comparator) tree ->
        f:('v1 -> 'v2) -> ('k, 'v2, 'comparator) tree
      val mapi :
        ('k, 'v1, 'comparator) tree ->
        f:(key:'k key -> data:'v1 -> 'v2) -> ('k, 'v2, 'comparator) tree
      val fold :
        ('k, 'v, 'b) tree ->
        init:'-> f:(key:'k key -> data:'-> '-> 'a) -> 'a
      val fold_right :
        ('k, 'v, 'b) tree ->
        init:'-> f:(key:'k key -> data:'-> '-> 'a) -> 'a
      val filter :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree ->
         f:(key:'k key -> data:'-> bool) -> ('k, 'v, 'comparator) tree)
        Core_map_intf.without_comparator
      val filter_map :
        ('k, 'comparator,
         ('k, 'v1, 'comparator) tree ->
         f:('v1 -> 'v2 option) -> ('k, 'v2, 'comparator) tree)
        Core_map_intf.without_comparator
      val filter_mapi :
        ('k, 'comparator,
         ('k, 'v1, 'comparator) tree ->
         f:(key:'k key -> data:'v1 -> 'v2 option) ->
         ('k, 'v2, 'comparator) tree)
        Core_map_intf.without_comparator
      val compare_direct :
        ('k, 'comparator,
         ('-> '-> int) ->
         ('k, 'v, 'comparator) tree -> ('k, 'v, 'comparator) tree -> int)
        Core_map_intf.without_comparator
      val equal :
        ('k, 'comparator,
         ('-> '-> bool) ->
         ('k, 'v, 'comparator) tree -> ('k, 'v, 'comparator) tree -> bool)
        Core_map_intf.without_comparator
      val keys : ('k, 'a, 'b) tree -> 'k key list
      val data : ('a, 'v, 'b) tree -> 'v list
      val to_alist : ('k, 'v, 'a) tree -> ('k key * 'v) list
      val merge :
        ('k, 'comparator,
         ('k, 'v1, 'comparator) tree ->
         ('k, 'v2, 'comparator) tree ->
         f:(key:'k key ->
            [ `Both of 'v1 * 'v2 | `Left of 'v1 | `Right of 'v2 ] ->
            'v3 option) ->
         ('k, 'v3, 'comparator) tree)
        Core_map_intf.without_comparator
      val symmetric_diff :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree ->
         ('k, 'v, 'comparator) tree ->
         data_equal:('-> '-> bool) ->
         ('k key * [ `Left of '| `Right of '| `Unequal of 'v * 'v ]) list)
        Core_map_intf.without_comparator
      val min_elt : ('k, 'v, 'a) tree -> ('k key * 'v) option
      val min_elt_exn : ('k, 'v, 'a) tree -> 'k key * 'v
      val max_elt : ('k, 'v, 'a) tree -> ('k key * 'v) option
      val max_elt_exn : ('k, 'v, 'a) tree -> 'k key * 'v
      val for_all : ('k, 'v, 'a) tree -> f:('-> bool) -> bool
      val exists : ('k, 'v, 'a) tree -> f:('-> bool) -> bool
      val fold_range_inclusive :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree ->
         min:'k key ->
         max:'k key -> init:'-> f:(key:'k key -> data:'-> '-> 'a) -> 'a)
        Core_map_intf.without_comparator
      val range_to_alist :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree ->
         min:'k key -> max:'k key -> ('k key * 'v) list)
        Core_map_intf.without_comparator
      val prev_key :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree -> 'k key -> ('k key * 'v) option)
        Core_map_intf.without_comparator
      val next_key :
        ('k, 'comparator,
         ('k, 'v, 'comparator) tree -> 'k key -> ('k key * 'v) option)
        Core_map_intf.without_comparator
      val rank :
        ('k, 'comparator, ('k, 'v, 'comparator) tree -> 'k key -> int option)
        Core_map_intf.without_comparator
      val to_tree :
        ('k, 'v, 'comparator) tree -> ('k key, 'v, 'comparator) tree
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'k) ->
        (Sexplib.Sexp.t -> 'v) ->
        Sexplib.Sexp.t -> ('k, 'v) Map.Poly.Tree.t
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) ->
        ('k, 'v) Map.Poly.Tree.t -> Sexplib.Sexp.t
    end
  val compare :
    ('-> '-> int) ->
    ('-> '-> int) ->
    ('a, 'b) Map.Poly.t -> ('a, 'b) Map.Poly.t -> int
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) ->
    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) Map.Poly.t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) ->
    ('-> Sexplib.Sexp.t) -> ('a, 'b) Map.Poly.t -> Sexplib.Sexp.t
  val bin_t :
    'Bin_prot.Type_class.t ->
    'Bin_prot.Type_class.t ->
    ('a, 'b) Map.Poly.t Bin_prot.Type_class.t
  val bin_read_t :
    'Bin_prot.Unsafe_read_c.reader ->
    'Bin_prot.Unsafe_read_c.reader ->
    ('a, 'b) Map.Poly.t Bin_prot.Read_ml.reader
  val bin_read_t_ :
    'Bin_prot.Unsafe_read_c.reader ->
    'Bin_prot.Unsafe_read_c.reader ->
    ('a, 'b) Map.Poly.t Bin_prot.Unsafe_read_c.reader
  val bin_read_t__ :
    'Bin_prot.Unsafe_read_c.reader ->
    'Bin_prot.Unsafe_read_c.reader ->
    (int -> ('a, 'b) Map.Poly.t) Bin_prot.Unsafe_read_c.reader
  val bin_reader_t :
    'Bin_prot.Type_class.reader ->
    'Bin_prot.Type_class.reader ->
    ('a, 'b) Map.Poly.t Bin_prot.Type_class.reader
  val bin_size_t :
    'Bin_prot.Size.sizer ->
    'Bin_prot.Size.sizer -> ('a, 'b) Map.Poly.t Bin_prot.Size.sizer
  val bin_write_t :
    'Bin_prot.Unsafe_write_c.writer ->
    'Bin_prot.Unsafe_write_c.writer ->
    ('a, 'b) Map.Poly.t Bin_prot.Write_ml.writer
  val bin_write_t_ :
    'Bin_prot.Unsafe_write_c.writer ->
    'Bin_prot.Unsafe_write_c.writer ->
    ('a, 'b) Map.Poly.t Bin_prot.Unsafe_write_c.writer
  val bin_writer_t :
    'Bin_prot.Type_class.writer ->
    'Bin_prot.Type_class.writer ->
    ('a, 'b) Map.Poly.t Bin_prot.Type_class.writer
end