functor (Key_info : KEY_INFO->   sig     type 'a key     module Key :       sig         type 'a info = 'Key_info.t         val create : 'a info -> 'a key         val info : 'a key -> 'a info         type t         val hide_type : 'a key -> t         val equal : t -> t -> bool         val compare : t -> t -> int       end     type t     val empty : t     val is_empty : t -> bool     val mem : 'a key -> t -> bool     val add : 'a 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     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   end