sig   module type KEY =     sig       type 'a typed       type 'a info       type t = V : 'B0.Hmap.KEY.typed -> B0.Hmap.KEY.t       val v :         ?loc:B0.Def.loc ->         ?doc:string ->         string -> 'B0.Conv.t -> 'B0.Hmap.KEY.info -> 'B0.Hmap.KEY.typed       val conv : 'B0.Hmap.KEY.typed -> 'B0.Conv.t       val info : 'B0.Hmap.KEY.typed -> 'B0.Hmap.KEY.info       val of_typed : 'B0.Hmap.KEY.typed -> B0.Hmap.KEY.t       val value_kind : string       val name : t -> string       val loc : t -> Def.loc       val doc : t -> string       val equal : t -> t -> bool       val compare : t -> t -> int       val compare_by_name : t -> t -> int       val find : string -> t option       val get : string -> t       val get_or_suggest : string -> (t, string list) result       val list : unit -> t list       val pp_name_str : string Fmt.t       val pp_name : t Fmt.t       val pp_synopsis : t Fmt.t       val pp_info : t Fmt.t       val pp_info_ext : t Fmt.t -> t Fmt.t     end   module type KEY_INFO =     sig       type 'a t       val key_kind : string       val key_namespaced : bool       val key_name_tty_color : B0.Tty.color       val pp : 'B0.Fmt.t -> 'B0.Hmap.KEY_INFO.t B0.Fmt.t     end   module type MAP =     sig       type 'a key       type t       val empty : B0.Hmap.MAP.t       val is_empty : B0.Hmap.MAP.t -> bool       val mem : 'B0.Hmap.MAP.key -> B0.Hmap.MAP.t -> bool       val add : 'B0.Hmap.MAP.key -> '-> B0.Hmap.MAP.t -> B0.Hmap.MAP.t       val add_tag : bool B0.Hmap.MAP.key -> B0.Hmap.MAP.t -> B0.Hmap.MAP.t       val singleton : 'B0.Hmap.MAP.key -> '-> B0.Hmap.MAP.t       val rem : 'B0.Hmap.MAP.key -> B0.Hmap.MAP.t -> B0.Hmap.MAP.t       val find : 'B0.Hmap.MAP.key -> B0.Hmap.MAP.t -> 'a option       val get : 'B0.Hmap.MAP.key -> B0.Hmap.MAP.t -> 'a       val get_or_suggest :         'B0.Hmap.MAP.key ->         B0.Hmap.MAP.t -> ('a, string list) Pervasives.result       val flag :         ?absent:bool -> bool B0.Hmap.MAP.key -> B0.Hmap.MAP.t -> bool       type binding = B : 'B0.Hmap.MAP.key * '-> B0.Hmap.MAP.binding       val iter : (B0.Hmap.MAP.binding -> unit) -> B0.Hmap.MAP.t -> unit       val fold :         (B0.Hmap.MAP.binding -> '-> 'a) -> B0.Hmap.MAP.t -> '-> 'a       val for_all : (B0.Hmap.MAP.binding -> bool) -> B0.Hmap.MAP.t -> bool       val exists : (B0.Hmap.MAP.binding -> bool) -> B0.Hmap.MAP.t -> bool       val filter :         (B0.Hmap.MAP.binding -> bool) -> B0.Hmap.MAP.t -> B0.Hmap.MAP.t       val cardinal : B0.Hmap.MAP.t -> int       val any_binding : B0.Hmap.MAP.t -> B0.Hmap.MAP.binding option       val get_any_binding : B0.Hmap.MAP.t -> B0.Hmap.MAP.binding       val pp : B0.Hmap.MAP.t B0.Fmt.t       type encode_error = string * [ `Msg of string ]       val encode :         B0.Hmap.MAP.t ->         (string * string) list * B0.Hmap.MAP.encode_error list       type decode_error = string * [ `Msg of string | `Unknown ]       val decode :         (string * string) list ->         B0.Hmap.MAP.t * B0.Hmap.MAP.decode_error list     end   module type S =     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   module Make :     functor (Key_info : KEY_INFO) () ->       sig         module Key :           sig             type 'a typed             type 'a info = 'Key_info.t             type t = V : 'a typed -> t             val v :               ?loc:Def.loc ->               ?doc:string -> string -> 'Conv.t -> 'a info -> 'a typed             val conv : 'a typed -> 'Conv.t             val info : 'a typed -> 'a info             val of_typed : 'a typed -> t             val value_kind : string             val name : t -> string             val loc : t -> Def.loc             val doc : t -> string             val equal : t -> t -> bool             val compare : t -> t -> int             val compare_by_name : t -> t -> int             val find : string -> t option             val get : string -> t             val get_or_suggest : string -> (t, string list) result             val list : unit -> t list             val pp_name_str : string Fmt.t             val pp_name : t Fmt.t             val pp_synopsis : t Fmt.t             val pp_info : t Fmt.t             val pp_info_ext : t Fmt.t -> t Fmt.t           end         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 end