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