sig   type key = pred   type 'a t   val is_empty : 'a t -> bool   val empty : 'a t   val add : key -> 'a -> 'a t -> 'a t   val mem : key -> 'a t -> bool   val find : key -> 'a t -> 'a   val remove : key -> 'a t -> 'a t   val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int   val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool   val iter : (key -> 'a -> unit) -> 'a t -> unit   val map : (key -> 'a -> 'b) -> 'a t -> 'b t   val mapf : (key -> 'a -> 'b option) -> 'a t -> 'b t   val mapq : (key -> 'a -> 'a option) -> 'a t -> 'a t   val filter : (key -> 'a -> bool) -> 'a t -> 'a t   val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t   val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b   val union : (key -> 'a -> 'a -> 'a) -> 'a t -> 'a t -> 'a t   val inter : (key -> 'a -> 'b -> 'c) -> 'a t -> 'b t -> 'c t   val interf : (key -> 'a -> 'b -> 'c option) -> 'a t -> 'b t -> 'c t   val interq : (key -> 'a -> 'a -> 'a option) -> 'a t -> 'a t -> 'a t   val diffq : (key -> 'a -> 'a -> 'a option) -> 'a t -> 'a t -> 'a t   val merge :     (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t   val insert : (key -> 'a -> 'a -> 'a) -> key -> 'a -> 'a t -> 'a t   val change :     (key -> 'b -> 'a option -> 'a option) -> key -> 'b -> 'a t -> 'a t end