sig
  type key
  type 'a t =
      Empty
    | Node of 'Rangemap.S.t * Rangemap.S.key * 'a * 'Rangemap.S.t * int
  val empty : 'Rangemap.S.t
  val is_empty : 'Rangemap.S.t -> bool
  val add : Rangemap.S.key -> '-> 'Rangemap.S.t -> 'Rangemap.S.t
  val find : Rangemap.S.key -> 'Rangemap.S.t -> 'a
  val remove : Rangemap.S.key -> 'Rangemap.S.t -> 'Rangemap.S.t
  val mem : Rangemap.S.key -> 'Rangemap.S.t -> bool
  val iter : (Rangemap.S.key -> '-> unit) -> 'Rangemap.S.t -> unit
  val map : ('-> 'b) -> 'Rangemap.S.t -> 'Rangemap.S.t
  val mapi :
    (Rangemap.S.key -> '-> 'b) -> 'Rangemap.S.t -> 'Rangemap.S.t
  val mapii :
    (Rangemap.S.key -> '-> Rangemap.S.key * 'b) ->
    'Rangemap.S.t -> 'Rangemap.S.t
  val fold :
    (Rangemap.S.key -> '-> '-> 'b) -> 'Rangemap.S.t -> '-> 'b
  val compare :
    ('-> '-> int) -> 'Rangemap.S.t -> 'Rangemap.S.t -> int
  val equal :
    ('-> '-> bool) -> 'Rangemap.S.t -> 'Rangemap.S.t -> bool
  val fold_range :
    (Rangemap.S.key -> Rangemap.fuzzy_order) ->
    (Rangemap.S.key -> '-> '-> 'b) -> 'Rangemap.S.t -> '-> 'b
  val height : 'Rangemap.S.t -> int
  val concerned_intervals :
    (Rangemap.S.key -> Rangemap.S.key -> Rangemap.fuzzy_order) ->
    Rangemap.S.key -> 'Rangemap.S.t -> (Rangemap.S.key * 'a) list
  exception Empty_rangemap
  val lowest_binding : 'Rangemap.S.t -> Rangemap.S.key * 'a
  exception No_such_binding
  val lowest_binding_above :
    (Rangemap.S.key -> bool) -> 'Rangemap.S.t -> Rangemap.S.key * 'a
  val merge : 'Rangemap.S.t -> 'Rangemap.S.t -> 'Rangemap.S.t
  val add_whole :
    (Rangemap.S.key -> Rangemap.S.key -> Rangemap.fuzzy_order) ->
    Rangemap.S.key -> '-> 'Rangemap.S.t -> 'Rangemap.S.t
  val remove_whole :
    (Rangemap.S.key -> Rangemap.S.key -> Rangemap.fuzzy_order) ->
    Rangemap.S.key -> 'Rangemap.S.t -> 'Rangemap.S.t
end