sig   module Key : KEY   type 'a key = 'Key.typed   type t   val empty : t   val is_empty : t -> bool   val mem : 'a key -> t -> bool   val add : 'a key -> '-> t -> t   val add_tag : bool key -> t -> t   val singleton : 'a key -> '-> t   val rem : 'a key -> t -> t   val find : 'a key -> t -> 'a option   val get : 'a key -> t -> 'a   val get_or_suggest : 'a key -> t -> ('a, string list) result   val flag : ?absent:bool -> bool key -> t -> bool   type binding = B : 'a key * '-> binding   val iter : (binding -> unit) -> t -> unit   val fold : (binding -> '-> 'a) -> t -> '-> 'a   val for_all : (binding -> bool) -> t -> bool   val exists : (binding -> bool) -> t -> bool   val filter : (binding -> bool) -> t -> t   val cardinal : t -> int   val any_binding : t -> binding option   val get_any_binding : t -> binding   val pp : t Fmt.t   type encode_error = string * [ `Msg of string ]   val encode : t -> (string * string) list * encode_error list   type decode_error = string * [ `Msg of string | `Unknown ]   val decode : (string * string) list -> t * decode_error list end