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