sig
  type key
  type +'a t
  val empty : 'CCWBTree.S.t
  val is_empty : 'CCWBTree.S.t -> bool
  val singleton : CCWBTree.S.key -> '-> 'CCWBTree.S.t
  val mem : CCWBTree.S.key -> 'CCWBTree.S.t -> bool
  val get : CCWBTree.S.key -> 'CCWBTree.S.t -> 'a option
  val get_exn : CCWBTree.S.key -> 'CCWBTree.S.t -> 'a
  val nth : int -> 'CCWBTree.S.t -> (CCWBTree.S.key * 'a) option
  val nth_exn : int -> 'CCWBTree.S.t -> CCWBTree.S.key * 'a
  val get_rank :
    CCWBTree.S.key ->
    'CCWBTree.S.t -> [ `After of int | `At of int | `First ]
  val add : CCWBTree.S.key -> '-> 'CCWBTree.S.t -> 'CCWBTree.S.t
  val remove : CCWBTree.S.key -> 'CCWBTree.S.t -> 'CCWBTree.S.t
  val update :
    CCWBTree.S.key ->
    ('a option -> 'a option) -> 'CCWBTree.S.t -> 'CCWBTree.S.t
  val cardinal : 'CCWBTree.S.t -> int
  val weight : 'CCWBTree.S.t -> int
  val fold :
    f:('-> CCWBTree.S.key -> '-> 'b) -> x:'-> 'CCWBTree.S.t -> 'b
  val mapi :
    f:(CCWBTree.S.key -> '-> 'b) -> 'CCWBTree.S.t -> 'CCWBTree.S.t
  val map : f:('-> 'b) -> 'CCWBTree.S.t -> 'CCWBTree.S.t
  val iter : f:(CCWBTree.S.key -> '-> unit) -> 'CCWBTree.S.t -> unit
  val split :
    CCWBTree.S.key ->
    'CCWBTree.S.t -> 'CCWBTree.S.t * 'a option * 'CCWBTree.S.t
  val merge :
    f:(CCWBTree.S.key -> 'a option -> 'b option -> 'c option) ->
    'CCWBTree.S.t -> 'CCWBTree.S.t -> 'CCWBTree.S.t
  val extract_min : 'CCWBTree.S.t -> CCWBTree.S.key * 'a * 'CCWBTree.S.t
  val extract_max : 'CCWBTree.S.t -> CCWBTree.S.key * 'a * 'CCWBTree.S.t
  val choose : 'CCWBTree.S.t -> (CCWBTree.S.key * 'a) option
  val choose_exn : 'CCWBTree.S.t -> CCWBTree.S.key * 'a
  val random_choose :
    Random.State.t -> 'CCWBTree.S.t -> CCWBTree.S.key * 'a
  val add_list :
    'CCWBTree.S.t -> (CCWBTree.S.key * 'a) list -> 'CCWBTree.S.t
  val of_list : (CCWBTree.S.key * 'a) list -> 'CCWBTree.S.t
  val to_list : 'CCWBTree.S.t -> (CCWBTree.S.key * 'a) list
  val add_seq :
    'CCWBTree.S.t ->
    (CCWBTree.S.key * 'a) CCWBTree.sequence -> 'CCWBTree.S.t
  val of_seq : (CCWBTree.S.key * 'a) CCWBTree.sequence -> 'CCWBTree.S.t
  val to_seq : 'CCWBTree.S.t -> (CCWBTree.S.key * 'a) CCWBTree.sequence
  val add_gen :
    'CCWBTree.S.t -> (CCWBTree.S.key * 'a) CCWBTree.gen -> 'CCWBTree.S.t
  val of_gen : (CCWBTree.S.key * 'a) CCWBTree.gen -> 'CCWBTree.S.t
  val to_gen : 'CCWBTree.S.t -> (CCWBTree.S.key * 'a) CCWBTree.gen
  val print :
    CCWBTree.S.key CCWBTree.printer ->
    'CCWBTree.printer -> 'CCWBTree.S.t CCWBTree.printer
  val node_ :
    CCWBTree.S.key ->
    '-> 'CCWBTree.S.t -> 'CCWBTree.S.t -> 'CCWBTree.S.t
  val balanced : 'CCWBTree.S.t -> bool
end