sig
  type 'a t = (Key.t, 'a, Key.comparator) Core_map_intf.S.tree
  val empty : 'a t
  val singleton : Key.t -> '-> 'a t
  val of_alist :
    (Key.t * 'a) list -> [ `Duplicate_key of Key.t | `Ok of 'a t ]
  val of_alist_exn : (Key.t * 'a) list -> 'a t
  val of_alist_multi : (Key.t * 'a) list -> 'a list t
  val of_alist_fold :
    (Key.t * 'a) list -> init:'-> f:('-> '-> 'b) -> 'b t
  val of_sorted_array : (Key.t * 'a) array -> 'a t Or_error.t
  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
  val of_tree : 'a t -> 'a t
  val invariants : 'a t -> bool
  val is_empty : 'a t -> bool
  val length : 'a t -> int
  val add : 'a t -> key:Key.t -> data:'-> 'a t
  val add_multi : 'a list t -> key:Key.t -> data:'-> 'a list t
  val change : 'a t -> Key.t -> ('a option -> 'a option) -> 'a t
  val find : 'a t -> Key.t -> 'a option
  val find_exn : 'a t -> Key.t -> 'a
  val remove : 'a t -> Key.t -> 'a t
  val mem : 'a t -> Key.t -> bool
  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
  val iter2 :
    'a t ->
    'b t ->
    f:(key:Key.t ->
       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] -> unit) ->
    unit
  val map : 'a t -> f:('-> 'b) -> 'b t
  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
  val fold : 'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
  val fold_right :
    'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
  val filter : 'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
  val filter_mapi : 'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
  val compare_direct : ('-> '-> int) -> 'a t -> 'a t -> int
  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
  val keys : 'a t -> Key.t list
  val data : 'a t -> 'a list
  val to_alist : 'a t -> (Key.t * 'a) list
  val validate :
    name:(Key.t -> string) -> 'Validate.check -> 'a t Validate.check
  val merge :
    'a t ->
    'b t ->
    f:(key:Key.t ->
       [ `Both of 'a * '| `Left of '| `Right of 'b ] -> 'c option) ->
    'c t
  val symmetric_diff :
    'a t ->
    'a t ->
    data_equal:('-> '-> bool) ->
    (Key.t * [ `Left of '| `Right of '| `Unequal of 'a * 'a ]) list
  val min_elt : 'a t -> (Key.t * 'a) option
  val min_elt_exn : 'a t -> Key.t * 'a
  val max_elt : 'a t -> (Key.t * 'a) option
  val max_elt_exn : 'a t -> Key.t * 'a
  val for_all : 'a t -> f:('-> bool) -> bool
  val exists : 'a t -> f:('-> bool) -> bool
  val fold_range_inclusive :
    'a t ->
    min:Key.t ->
    max:Key.t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
  val range_to_alist : 'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
  val rank : 'a t -> Key.t -> int option
  val to_tree : 'a t -> 'a t
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'Core_map_intf.S.Tree.t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) -> 'Core_map_intf.S.Tree.t -> Sexplib.Sexp.t
end