sig   type 'a sequence = ('-> unit) -> unit   type 'a gen = unit -> 'a option   type 'a printer = Format.formatter -> '-> unit   module type ORD =     sig type t val compare : CCWBTree.ORD.t -> CCWBTree.ORD.t -> int end   module type KEY =     sig type t val compare : t -> t -> int val weight : t -> int end   module type S =     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 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   module Make :     functor (X : ORD->       sig         type key = X.t         type +'a t         val empty : 'a t         val is_empty : 'a t -> bool         val singleton : key -> '-> 'a t         val mem : key -> 'a t -> bool         val get : key -> 'a t -> 'a option         val get_exn : key -> 'a t -> 'a         val nth : int -> 'a t -> (key * 'a) option         val nth_exn : int -> 'a t -> key * 'a         val add : key -> '-> 'a t -> 'a t         val remove : key -> 'a t -> 'a t         val update : key -> ('a option -> 'a option) -> 'a t -> 'a t         val cardinal : 'a t -> int         val weight : 'a t -> int         val fold : f:('-> key -> '-> 'b) -> x:'-> 'a t -> 'b         val mapi : f:(key -> '-> 'b) -> 'a t -> 'b t         val map : f:('-> 'b) -> 'a t -> 'b t         val iter : f:(key -> '-> unit) -> 'a t -> unit         val split : key -> 'a t -> 'a t * 'a option * 'a t         val merge :           f:(key -> 'a option -> 'b option -> 'c option) ->           'a t -> 'b t -> 'c t         val extract_min : 'a t -> key * 'a * 'a t         val extract_max : 'a t -> key * 'a * 'a t         val choose : 'a t -> (key * 'a) option         val choose_exn : 'a t -> key * 'a         val random_choose : Random.State.t -> 'a t -> key * 'a         val add_list : 'a t -> (key * 'a) list -> 'a t         val of_list : (key * 'a) list -> 'a t         val to_list : 'a t -> (key * 'a) list         val add_seq : 'a t -> (key * 'a) sequence -> 'a t         val of_seq : (key * 'a) sequence -> 'a t         val to_seq : 'a t -> (key * 'a) sequence         val add_gen : 'a t -> (key * 'a) gen -> 'a t         val of_gen : (key * 'a) gen -> 'a t         val to_gen : 'a t -> (key * 'a) gen         val print : key printer -> 'a printer -> 'a t printer         val node_ : key -> '-> 'a t -> 'a t -> 'a t         val balanced : 'a t -> bool       end   module MakeFull :     functor (X : KEY->       sig         type key = X.t         type +'a t         val empty : 'a t         val is_empty : 'a t -> bool         val singleton : key -> '-> 'a t         val mem : key -> 'a t -> bool         val get : key -> 'a t -> 'a option         val get_exn : key -> 'a t -> 'a         val nth : int -> 'a t -> (key * 'a) option         val nth_exn : int -> 'a t -> key * 'a         val add : key -> '-> 'a t -> 'a t         val remove : key -> 'a t -> 'a t         val update : key -> ('a option -> 'a option) -> 'a t -> 'a t         val cardinal : 'a t -> int         val weight : 'a t -> int         val fold : f:('-> key -> '-> 'b) -> x:'-> 'a t -> 'b         val mapi : f:(key -> '-> 'b) -> 'a t -> 'b t         val map : f:('-> 'b) -> 'a t -> 'b t         val iter : f:(key -> '-> unit) -> 'a t -> unit         val split : key -> 'a t -> 'a t * 'a option * 'a t         val merge :           f:(key -> 'a option -> 'b option -> 'c option) ->           'a t -> 'b t -> 'c t         val extract_min : 'a t -> key * 'a * 'a t         val extract_max : 'a t -> key * 'a * 'a t         val choose : 'a t -> (key * 'a) option         val choose_exn : 'a t -> key * 'a         val random_choose : Random.State.t -> 'a t -> key * 'a         val add_list : 'a t -> (key * 'a) list -> 'a t         val of_list : (key * 'a) list -> 'a t         val to_list : 'a t -> (key * 'a) list         val add_seq : 'a t -> (key * 'a) sequence -> 'a t         val of_seq : (key * 'a) sequence -> 'a t         val to_seq : 'a t -> (key * 'a) sequence         val add_gen : 'a t -> (key * 'a) gen -> 'a t         val of_gen : (key * 'a) gen -> 'a t         val to_gen : 'a t -> (key * 'a) gen         val print : key printer -> 'a printer -> 'a t printer         val node_ : key -> '-> 'a t -> 'a t -> 'a t         val balanced : 'a t -> bool       end end