functor (K : Cf_ordered.Total_T->
  sig
    type +'a t
    module Key : sig type t = K.t val compare : t -> t -> int end
    val nil : 'a t
    val empty : 'a t -> bool
    val size : 'a t -> int
    val min : 'a t -> Key.t * 'a
    val max : 'a t -> Key.t * 'a
    val search : Key.t -> 'a t -> 'a
    val member : Key.t -> 'a t -> bool
    val insert : Key.t * '-> 'a t -> 'a t * 'a option
    val replace : Key.t * '-> 'a t -> 'a t
    val modify : Key.t -> ('-> 'a) -> 'a t -> 'a t
    val extract : Key.t -> 'a t -> 'a * 'a t
    val delete : Key.t -> 'a t -> 'a t
    val of_list : (Key.t * 'a) list -> 'a t
    val of_list_incr : (Key.t * 'a) list -> 'a t
    val of_list_decr : (Key.t * 'a) list -> 'a t
    val of_seq : (Key.t * 'a) Cf_seq.t -> 'a t
    val of_seq_incr : (Key.t * 'a) Cf_seq.t -> 'a t
    val of_seq_decr : (Key.t * 'a) Cf_seq.t -> 'a t
    val to_list_incr : 'a t -> (Key.t * 'a) list
    val to_list_decr : 'a t -> (Key.t * 'a) list
    val to_seq_incr : 'a t -> (Key.t * 'a) Cf_seq.t
    val to_seq_decr : 'a t -> (Key.t * 'a) Cf_seq.t
    val nearest_decr : Key.t -> 'a t -> (Key.t * 'a) Cf_seq.t
    val nearest_incr : Key.t -> 'a t -> (Key.t * 'a) Cf_seq.t
    val iterate : (Key.t * '-> unit) -> 'a t -> unit
    val predicate : (Key.t * '-> bool) -> 'a t -> bool
    val fold : ('-> Key.t * '-> 'b) -> '-> 'a t -> 'b
    val filter : (Key.t * '-> bool) -> 'a t -> 'a t
    val map : (Key.t * '-> 'b) -> 'a t -> 'b t
    val optmap : (Key.t * '-> 'b option) -> 'a t -> 'b t
    val partition : (Key.t * '-> bool) -> 'a t -> 'a t * 'a t
  end