sig   type 'a sequence = ('-> unit) -> unit   type 'a ktree = unit -> [ `Nil | `Node of 'a * 'CCTrie.ktree list ]   module type WORD =     sig       type t       type char_       val compare : CCTrie.WORD.char_ -> CCTrie.WORD.char_ -> int       val to_seq : CCTrie.WORD.t -> CCTrie.WORD.char_ CCTrie.sequence       val of_list : CCTrie.WORD.char_ list -> CCTrie.WORD.t     end   module type S =     sig       type char_       type key       type 'a t       val empty : 'CCTrie.S.t       val is_empty : 'CCTrie.S.t -> bool       val add : CCTrie.S.key -> '-> 'CCTrie.S.t -> 'CCTrie.S.t       val remove : CCTrie.S.key -> 'CCTrie.S.t -> 'CCTrie.S.t       val find : CCTrie.S.key -> 'CCTrie.S.t -> 'a option       val find_exn : CCTrie.S.key -> 'CCTrie.S.t -> 'a       val longest_prefix : CCTrie.S.key -> 'CCTrie.S.t -> CCTrie.S.key       val update :         CCTrie.S.key ->         ('a option -> 'a option) -> 'CCTrie.S.t -> 'CCTrie.S.t       val fold :         ('-> CCTrie.S.key -> '-> 'b) -> '-> 'CCTrie.S.t -> 'b       val mapi : (CCTrie.S.key -> '-> 'b) -> 'CCTrie.S.t -> 'CCTrie.S.t       val map : ('-> 'b) -> 'CCTrie.S.t -> 'CCTrie.S.t       val iter : (CCTrie.S.key -> '-> unit) -> 'CCTrie.S.t -> unit       val fold_values : ('-> '-> 'b) -> '-> 'CCTrie.S.t -> 'b       val iter_values : ('-> unit) -> 'CCTrie.S.t -> unit       val merge :         ('-> '-> 'a option) ->         'CCTrie.S.t -> 'CCTrie.S.t -> 'CCTrie.S.t       val size : 'CCTrie.S.t -> int       val to_list : 'CCTrie.S.t -> (CCTrie.S.key * 'a) list       val of_list : (CCTrie.S.key * 'a) list -> 'CCTrie.S.t       val to_seq : 'CCTrie.S.t -> (CCTrie.S.key * 'a) CCTrie.sequence       val of_seq : (CCTrie.S.key * 'a) CCTrie.sequence -> 'CCTrie.S.t       val to_seq_values : 'CCTrie.S.t -> 'CCTrie.sequence       val to_tree :         'CCTrie.S.t ->         [ `Char of CCTrie.S.char_ | `Switch | `Val of 'a ] CCTrie.ktree       val above :         CCTrie.S.key -> 'CCTrie.S.t -> (CCTrie.S.key * 'a) CCTrie.sequence       val below :         CCTrie.S.key -> 'CCTrie.S.t -> (CCTrie.S.key * 'a) CCTrie.sequence       val check_invariants : 'CCTrie.S.t -> bool     end   module Make :     functor (W : WORD->       sig         type char_ = W.char_         type key = W.t         type 'a t         val empty : 'a t         val is_empty : 'a t -> bool         val add : key -> '-> 'a t -> 'a t         val remove : key -> 'a t -> 'a t         val find : key -> 'a t -> 'a option         val find_exn : key -> 'a t -> 'a         val longest_prefix : key -> 'a t -> key         val update : key -> ('a option -> 'a option) -> 'a t -> 'a t         val fold : ('-> key -> '-> 'b) -> '-> 'a t -> 'b         val mapi : (key -> '-> 'b) -> 'a t -> 'b t         val map : ('-> 'b) -> 'a t -> 'b t         val iter : (key -> '-> unit) -> 'a t -> unit         val fold_values : ('-> '-> 'b) -> '-> 'a t -> 'b         val iter_values : ('-> unit) -> 'a t -> unit         val merge : ('-> '-> 'a option) -> 'a t -> 'a t -> 'a t         val size : 'a t -> int         val to_list : 'a t -> (key * 'a) list         val of_list : (key * 'a) list -> 'a t         val to_seq : 'a t -> (key * 'a) sequence         val of_seq : (key * 'a) sequence -> 'a t         val to_seq_values : 'a t -> 'a sequence         val to_tree : 'a t -> [ `Char of char_ | `Switch | `Val of 'a ] ktree         val above : key -> 'a t -> (key * 'a) sequence         val below : key -> 'a t -> (key * 'a) sequence         val check_invariants : 'a t -> bool       end   module type ORDERED =     sig type t val compare : CCTrie.ORDERED.t -> CCTrie.ORDERED.t -> int end   module MakeArray :     functor (X : ORDERED->       sig         type char_ = X.t         type key = X.t array         type 'a t         val empty : 'a t         val is_empty : 'a t -> bool         val add : key -> '-> 'a t -> 'a t         val remove : key -> 'a t -> 'a t         val find : key -> 'a t -> 'a option         val find_exn : key -> 'a t -> 'a         val longest_prefix : key -> 'a t -> key         val update : key -> ('a option -> 'a option) -> 'a t -> 'a t         val fold : ('-> key -> '-> 'b) -> '-> 'a t -> 'b         val mapi : (key -> '-> 'b) -> 'a t -> 'b t         val map : ('-> 'b) -> 'a t -> 'b t         val iter : (key -> '-> unit) -> 'a t -> unit         val fold_values : ('-> '-> 'b) -> '-> 'a t -> 'b         val iter_values : ('-> unit) -> 'a t -> unit         val merge : ('-> '-> 'a option) -> 'a t -> 'a t -> 'a t         val size : 'a t -> int         val to_list : 'a t -> (key * 'a) list         val of_list : (key * 'a) list -> 'a t         val to_seq : 'a t -> (key * 'a) sequence         val of_seq : (key * 'a) sequence -> 'a t         val to_seq_values : 'a t -> 'a sequence         val to_tree : 'a t -> [ `Char of char_ | `Switch | `Val of 'a ] ktree         val above : key -> 'a t -> (key * 'a) sequence         val below : key -> 'a t -> (key * 'a) sequence         val check_invariants : 'a t -> bool       end   module MakeList :     functor (X : ORDERED->       sig         type char_ = X.t         type key = X.t list         type 'a t         val empty : 'a t         val is_empty : 'a t -> bool         val add : key -> '-> 'a t -> 'a t         val remove : key -> 'a t -> 'a t         val find : key -> 'a t -> 'a option         val find_exn : key -> 'a t -> 'a         val longest_prefix : key -> 'a t -> key         val update : key -> ('a option -> 'a option) -> 'a t -> 'a t         val fold : ('-> key -> '-> 'b) -> '-> 'a t -> 'b         val mapi : (key -> '-> 'b) -> 'a t -> 'b t         val map : ('-> 'b) -> 'a t -> 'b t         val iter : (key -> '-> unit) -> 'a t -> unit         val fold_values : ('-> '-> 'b) -> '-> 'a t -> 'b         val iter_values : ('-> unit) -> 'a t -> unit         val merge : ('-> '-> 'a option) -> 'a t -> 'a t -> 'a t         val size : 'a t -> int         val to_list : 'a t -> (key * 'a) list         val of_list : (key * 'a) list -> 'a t         val to_seq : 'a t -> (key * 'a) sequence         val of_seq : (key * 'a) sequence -> 'a t         val to_seq_values : 'a t -> 'a sequence         val to_tree : 'a t -> [ `Char of char_ | `Switch | `Val of 'a ] ktree         val above : key -> 'a t -> (key * 'a) sequence         val below : key -> 'a t -> (key * 'a) sequence         val check_invariants : 'a t -> bool       end   module String :     sig       type char_ = char       type key = string       type 'a t       val empty : 'a t       val is_empty : 'a t -> bool       val add : key -> '-> 'a t -> 'a t       val remove : key -> 'a t -> 'a t       val find : key -> 'a t -> 'a option       val find_exn : key -> 'a t -> 'a       val longest_prefix : key -> 'a t -> key       val update : key -> ('a option -> 'a option) -> 'a t -> 'a t       val fold : ('-> key -> '-> 'b) -> '-> 'a t -> 'b       val mapi : (key -> '-> 'b) -> 'a t -> 'b t       val map : ('-> 'b) -> 'a t -> 'b t       val iter : (key -> '-> unit) -> 'a t -> unit       val fold_values : ('-> '-> 'b) -> '-> 'a t -> 'b       val iter_values : ('-> unit) -> 'a t -> unit       val merge : ('-> '-> 'a option) -> 'a t -> 'a t -> 'a t       val size : 'a t -> int       val to_list : 'a t -> (key * 'a) list       val of_list : (key * 'a) list -> 'a t       val to_seq : 'a t -> (key * 'a) sequence       val of_seq : (key * 'a) sequence -> 'a t       val to_seq_values : 'a t -> 'a sequence       val to_tree : 'a t -> [ `Char of char_ | `Switch | `Val of 'a ] ktree       val above : key -> 'a t -> (key * 'a) sequence       val below : key -> 'a t -> (key * 'a) sequence       val check_invariants : 'a t -> bool     end end