sig
  type ('key, 'value, 'comparator) t = ('key, 'value, 'comparator) Map.t
  type ('a, 'b, 'c) t_ = ('a, 'b, 'c) t
  type ('key, 'value, 'comparator) tree =
      ('key, 'value, 'comparator) Map.tree
  type 'a key = 'a
  type ('a, 'b, 'c) options = ('a, 'b, 'c) Core_map_intf.with_comparator
  val empty :
    ('k, 'comparator, ('k, 'a, 'comparator) t) Core_map_intf.with_comparator
  val singleton :
    ('k, 'comparator, 'k key -> '-> ('k, 'v, 'comparator) t)
    Core_map_intf.with_comparator
  val of_sorted_array :
    ('k, 'comparator,
     ('k key * 'v) array -> ('k, 'v, 'comparator) t Or_error.t)
    Core_map_intf.with_comparator
  val of_sorted_array_unchecked :
    ('k, 'comparator, ('k key * 'v) array -> ('k, 'v, 'comparator) t)
    Core_map_intf.with_comparator
  val of_alist :
    ('k, 'comparator,
     ('k key * 'v) list ->
     [ `Duplicate_key of 'k key | `Ok of ('k, 'v, 'comparator) t ])
    Core_map_intf.with_comparator
  val of_alist_exn :
    ('k, 'comparator, ('k key * 'v) list -> ('k, 'v, 'comparator) t)
    Core_map_intf.with_comparator
  val of_alist_multi :
    ('k, 'comparator, ('k key * 'v) list -> ('k, 'v list, 'comparator) t)
    Core_map_intf.with_comparator
  val of_alist_fold :
    ('k, 'comparator,
     ('k key * 'v1) list ->
     init:'v2 -> f:('v2 -> 'v1 -> 'v2) -> ('k, 'v2, 'comparator) t)
    Core_map_intf.with_comparator
  val of_tree :
    ('k, 'comparator,
     ('k key, 'v, 'comparator) tree -> ('k, 'v, 'comparator) t)
    Core_map_intf.with_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 comparator : ('a, 'b, 'comparator) t -> ('a, 'comparator) Comparator.t
  module Poly :
    sig
      type ('a, 'b, 'c) map = ('a, 'b, 'c) t
      type ('a, 'b, 'c) tree = ('a, 'b, 'c) tree
      type ('a, 'b) t = ('a, 'b, Comparator.Poly.comparator) map
      type ('a, 'b, 'c) t_ = ('a, 'b) 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) t
      module Tree :
        sig
          type ('k, 'v) t = ('k, 'v, Comparator.Poly.comparator) 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) t
          val sexp_of_t :
            ('-> Sexplib.Sexp.t) ->
            ('-> Sexplib.Sexp.t) -> ('k, 'v) t -> Sexplib.Sexp.t
        end
      val compare :
        ('-> '-> int) ->
        ('-> '-> int) -> ('a, 'b) t -> ('a, 'b) t -> int
      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_t :
        'Bin_prot.Type_class.t ->
        'Bin_prot.Type_class.t -> ('a, 'b) t Bin_prot.Type_class.t
      val bin_read_t :
        'Bin_prot.Unsafe_read_c.reader ->
        'Bin_prot.Unsafe_read_c.reader ->
        ('a, 'b) t Bin_prot.Read_ml.reader
      val bin_read_t_ :
        'Bin_prot.Unsafe_read_c.reader ->
        'Bin_prot.Unsafe_read_c.reader ->
        ('a, 'b) 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) t) Bin_prot.Unsafe_read_c.reader
      val bin_reader_t :
        'Bin_prot.Type_class.reader ->
        'Bin_prot.Type_class.reader ->
        ('a, 'b) t Bin_prot.Type_class.reader
      val bin_size_t :
        'Bin_prot.Size.sizer ->
        'Bin_prot.Size.sizer -> ('a, 'b) t Bin_prot.Size.sizer
      val bin_write_t :
        'Bin_prot.Unsafe_write_c.writer ->
        'Bin_prot.Unsafe_write_c.writer ->
        ('a, 'b) t Bin_prot.Write_ml.writer
      val bin_write_t_ :
        'Bin_prot.Unsafe_write_c.writer ->
        'Bin_prot.Unsafe_write_c.writer ->
        ('a, 'b) t Bin_prot.Unsafe_write_c.writer
      val bin_writer_t :
        'Bin_prot.Type_class.writer ->
        'Bin_prot.Type_class.writer ->
        ('a, 'b) t Bin_prot.Type_class.writer
    end
  module type Key = Core_map_intf.Key
  module type Key_binable = Core_map_intf.Key_binable
  module type S =
    sig
      module Key : Comparator.S
      type ('a, 'b, 'c) map = ('a, 'b, 'c) t
      type ('a, 'b, 'c) tree = ('a, 'b, 'c) tree
      type 'v t = (Key.t, 'v, Key.comparator) map
      type ('k, 'v, 'comparator) t_ = 'v t
      type 'a key_ = Key.t
      type ('a, 'b, 'c) options =
          ('a, 'b, 'c) Core_map_intf.without_comparator
      val empty :
        ('k, 'comparator, ('k, 'a, 'comparator) t_)
        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
      module Tree :
        sig
          type 'v t = (Key.t, 'v, Key.comparator) tree
          type ('k, 'v, 'c) t_ = 'v t
          val empty :
            ('k, 'comparator, ('k, 'a, 'comparator) t_)
            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 t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
          val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
        end
      val compare : ('-> '-> int) -> 'v t -> 'v t -> int
      val t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
      val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
    end
  module type S_binable =
    sig
      module Key : Comparator.S
      type ('a, 'b, 'c) map = ('a, 'b, 'c) t
      type ('a, 'b, 'c) tree = ('a, 'b, 'c) tree
      type 'v t = (Key.t, 'v, Key.comparator) map
      type ('k, 'v, 'comparator) t_ = 'v t
      type 'a key_ = Key.t
      type ('a, 'b, 'c) options =
          ('a, 'b, 'c) Core_map_intf.without_comparator
      val empty :
        ('k, 'comparator, ('k, 'a, 'comparator) t_)
        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
      module Tree :
        sig
          type 'v t = (Key.t, 'v, Key.comparator) tree
          type ('k, 'v, 'c) t_ = 'v t
          val empty :
            ('k, 'comparator, ('k, 'a, 'comparator) t_)
            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 t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
          val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
        end
      val compare : ('-> '-> int) -> 'v t -> 'v t -> int
      val t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
      val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
      val bin_write_t : ('a, 'a t) Bin_prot.Map_to_safe.writer1
      val bin_write_t_ : ('a, 'a t) Bin_prot.Unsafe_write_c.writer1
      val bin_read_t : ('a, 'a t) Bin_prot.Map_to_safe.reader1
      val bin_read_t_ : ('a, 'a t) Bin_prot.Unsafe_read_c.reader1
      val bin_read_t__ : ('a, int -> 'a t) Bin_prot.Unsafe_read_c.reader1
      val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
      val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
    end
  module Make :
    functor (Key : Key->
      sig
        module Key :
          sig
            type t = Key.t
            val compare : t -> t -> int
            val t_of_sexp : Sexplib.Sexp.t -> t
            val sexp_of_t : t -> Sexplib.Sexp.t
            type comparator = Map.Make(Key).Key.comparator
            val comparator : (t, comparator) Comparator.t_
          end
        type ('a, 'b, 'c) map = ('a, 'b, 'c) t
        type ('a, 'b, 'c) tree = ('a, 'b, 'c) tree
        type 'v t = (Key.t, 'v, Key.comparator) map
        type ('k, 'v, 'comparator) t_ = 'v t
        type 'a key_ = Key.t
        type ('a, 'b, 'c) options =
            ('a, 'b, 'c) Core_map_intf.without_comparator
        val empty :
          ('k, 'comparator, ('k, 'a, 'comparator) t_)
          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
        module Tree :
          sig
            type 'v t = (Key.t, 'v, Key.comparator) tree
            type ('k, 'v, 'c) t_ = 'v t
            val empty :
              ('k, 'comparator, ('k, 'a, 'comparator) t_)
              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 t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
            val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
          end
        val compare : ('-> '-> int) -> 'v t -> 'v t -> int
        val t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
        val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
      end
  module Make_using_comparator :
    functor (Key : Comparator.S->
      sig
        module Key :
          sig
            type t = Key.t
            val compare : t -> t -> int
            val t_of_sexp : Sexplib.Sexp.t -> t
            val sexp_of_t : t -> Sexplib.Sexp.t
            type comparator = Key.comparator
            val comparator : (t, comparator) Comparator.t_
          end
        type ('a, 'b, 'c) map = ('a, 'b, 'c) t
        type ('a, 'b, 'c) tree = ('a, 'b, 'c) tree
        type 'v t = (Key.t, 'v, Key.comparator) map
        type ('k, 'v, 'comparator) t_ = 'v t
        type 'a key_ = Key.t
        type ('a, 'b, 'c) options =
            ('a, 'b, 'c) Core_map_intf.without_comparator
        val empty :
          ('k, 'comparator, ('k, 'a, 'comparator) t_)
          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
        module Tree :
          sig
            type 'v t = (Key.t, 'v, Key.comparator) tree
            type ('k, 'v, 'c) t_ = 'v t
            val empty :
              ('k, 'comparator, ('k, 'a, 'comparator) t_)
              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 t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
            val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
          end
        val compare : ('-> '-> int) -> 'v t -> 'v t -> int
        val t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
        val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
      end
  module Make_binable :
    functor (Key : Key_binable->
      sig
        module Key :
          sig
            type t = Key.t
            val compare : t -> t -> int
            val t_of_sexp : Sexplib.Sexp.t -> t
            val sexp_of_t : t -> Sexplib.Sexp.t
            type comparator = Map.Make_binable(Key).Key.comparator
            val comparator : (t, comparator) Comparator.t_
          end
        type ('a, 'b, 'c) map = ('a, 'b, 'c) t
        type ('a, 'b, 'c) tree = ('a, 'b, 'c) tree
        type 'v t = (Key.t, 'v, Key.comparator) map
        type ('k, 'v, 'comparator) t_ = 'v t
        type 'a key_ = Key.t
        type ('a, 'b, 'c) options =
            ('a, 'b, 'c) Core_map_intf.without_comparator
        val empty :
          ('k, 'comparator, ('k, 'a, 'comparator) t_)
          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
        module Tree :
          sig
            type 'v t = (Key.t, 'v, Key.comparator) tree
            type ('k, 'v, 'c) t_ = 'v t
            val empty :
              ('k, 'comparator, ('k, 'a, 'comparator) t_)
              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 t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
            val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
          end
        val compare : ('-> '-> int) -> 'v t -> 'v t -> int
        val t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
        val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
        val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
        val bin_write_t : ('a, 'a t) Bin_prot.Map_to_safe.writer1
        val bin_write_t_ : ('a, 'a t) Bin_prot.Unsafe_write_c.writer1
        val bin_read_t : ('a, 'a t) Bin_prot.Map_to_safe.reader1
        val bin_read_t_ : ('a, 'a t) Bin_prot.Unsafe_read_c.reader1
        val bin_read_t__ : ('a, int -> 'a t) Bin_prot.Unsafe_read_c.reader1
        val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
        val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
        val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
      end
  module Make_binable_using_comparator :
    functor (Key : Comparator.S_binable->
      sig
        module Key :
          sig
            type t = Key.t
            val compare : t -> t -> int
            val t_of_sexp : Sexplib.Sexp.t -> t
            val sexp_of_t : t -> Sexplib.Sexp.t
            type comparator = Key.comparator
            val comparator : (t, comparator) Comparator.t_
          end
        type ('a, 'b, 'c) map = ('a, 'b, 'c) t
        type ('a, 'b, 'c) tree = ('a, 'b, 'c) tree
        type 'v t = (Key.t, 'v, Key.comparator) map
        type ('k, 'v, 'comparator) t_ = 'v t
        type 'a key_ = Key.t
        type ('a, 'b, 'c) options =
            ('a, 'b, 'c) Core_map_intf.without_comparator
        val empty :
          ('k, 'comparator, ('k, 'a, 'comparator) t_)
          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
        module Tree :
          sig
            type 'v t = (Key.t, 'v, Key.comparator) tree
            type ('k, 'v, 'c) t_ = 'v t
            val empty :
              ('k, 'comparator, ('k, 'a, 'comparator) t_)
              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 t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
            val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
          end
        val compare : ('-> '-> int) -> 'v t -> 'v t -> int
        val t_of_sexp : (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
        val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
        val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
        val bin_write_t : ('a, 'a t) Bin_prot.Map_to_safe.writer1
        val bin_write_t_ : ('a, 'a t) Bin_prot.Unsafe_write_c.writer1
        val bin_read_t : ('a, 'a t) Bin_prot.Map_to_safe.reader1
        val bin_read_t_ : ('a, 'a t) Bin_prot.Unsafe_read_c.reader1
        val bin_read_t__ : ('a, int -> 'a t) Bin_prot.Unsafe_read_c.reader1
        val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
        val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
        val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
      end
  module Tree :
    sig
      type ('k, 'v, 'comparator) t = ('k, 'v, 'comparator) tree
      val empty :
        ('k, 'comparator, ('k, 'a, 'comparator) t)
        Core_map_intf.with_comparator
      val singleton :
        ('k, 'comparator, 'k key -> '-> ('k, 'v, 'comparator) t)
        Core_map_intf.with_comparator
      val of_sorted_array :
        ('k, 'comparator,
         ('k key * 'v) array -> ('k, 'v, 'comparator) t Or_error.t)
        Core_map_intf.with_comparator
      val of_sorted_array_unchecked :
        ('k, 'comparator, ('k key * 'v) array -> ('k, 'v, 'comparator) t)
        Core_map_intf.with_comparator
      val of_alist :
        ('k, 'comparator,
         ('k key * 'v) list ->
         [ `Duplicate_key of 'k key | `Ok of ('k, 'v, 'comparator) t ])
        Core_map_intf.with_comparator
      val of_alist_exn :
        ('k, 'comparator, ('k key * 'v) list -> ('k, 'v, 'comparator) t)
        Core_map_intf.with_comparator
      val of_alist_multi :
        ('k, 'comparator, ('k key * 'v) list -> ('k, 'v list, 'comparator) t)
        Core_map_intf.with_comparator
      val of_alist_fold :
        ('k, 'comparator,
         ('k key * 'v1) list ->
         init:'v2 -> f:('v2 -> 'v1 -> 'v2) -> ('k, 'v2, 'comparator) t)
        Core_map_intf.with_comparator
      val of_tree :
        ('k, 'comparator,
         ('k key, 'v, 'comparator) tree -> ('k, 'v, 'comparator) t)
        Core_map_intf.with_comparator
      val invariants :
        ('k, 'comparator, ('k, 'v, 'comparator) t -> bool)
        Core_map_intf.with_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.with_comparator
      val add_multi :
        ('k, 'comparator,
         ('k, 'v list, 'comparator) t ->
         key:'k key -> data:'-> ('k, 'v list, 'comparator) t)
        Core_map_intf.with_comparator
      val change :
        ('k, 'comparator,
         ('k, 'v, 'comparator) t ->
         'k key -> ('v option -> 'v option) -> ('k, 'v, 'comparator) t)
        Core_map_intf.with_comparator
      val find :
        ('k, 'comparator, ('k, 'v, 'comparator) t -> 'k key -> 'v option)
        Core_map_intf.with_comparator
      val find_exn :
        ('k, 'comparator, ('k, 'v, 'comparator) t -> 'k key -> 'v)
        Core_map_intf.with_comparator
      val remove :
        ('k, 'comparator,
         ('k, 'v, 'comparator) t -> 'k key -> ('k, 'v, 'comparator) t)
        Core_map_intf.with_comparator
      val mem :
        ('k, 'comparator, ('k, 'a, 'comparator) t -> 'k key -> bool)
        Core_map_intf.with_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.with_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.with_comparator
      val filter_map :
        ('k, 'comparator,
         ('k, 'v1, 'comparator) t ->
         f:('v1 -> 'v2 option) -> ('k, 'v2, 'comparator) t)
        Core_map_intf.with_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.with_comparator
      val compare_direct :
        ('k, 'comparator,
         ('-> '-> int) ->
         ('k, 'v, 'comparator) t -> ('k, 'v, 'comparator) t -> int)
        Core_map_intf.with_comparator
      val equal :
        ('k, 'comparator,
         ('-> '-> bool) ->
         ('k, 'v, 'comparator) t -> ('k, 'v, 'comparator) t -> bool)
        Core_map_intf.with_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.with_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.with_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.with_comparator
      val range_to_alist :
        ('k, 'comparator,
         ('k, 'v, 'comparator) t ->
         min:'k key -> max:'k key -> ('k key * 'v) list)
        Core_map_intf.with_comparator
      val prev_key :
        ('k, 'comparator,
         ('k, 'v, 'comparator) t -> 'k key -> ('k key * 'v) option)
        Core_map_intf.with_comparator
      val next_key :
        ('k, 'comparator,
         ('k, 'v, 'comparator) t -> 'k key -> ('k key * 'v) option)
        Core_map_intf.with_comparator
      val rank :
        ('k, 'comparator, ('k, 'v, 'comparator) t -> 'k key -> int option)
        Core_map_intf.with_comparator
      val to_tree : ('k, 'v, 'comparator) t -> ('k key, 'v, 'comparator) tree
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) ->
        ('comparator -> Sexplib.Sexp.t) ->
        ('k, 'v, 'comparator) t -> Sexplib.Sexp.t
    end
end