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