sig   type 'a key   module Key :     sig       val create : unit -> 'Hmap.key       type t       val hide_type : 'Hmap.key -> Hmap.Key.t       val equal : Hmap.Key.t -> Hmap.Key.t -> bool       val compare : Hmap.Key.t -> Hmap.Key.t -> int     end   type t   val empty : Hmap.t   val is_empty : Hmap.t -> bool   val mem : 'Hmap.key -> Hmap.t -> bool   val add : 'Hmap.key -> '-> Hmap.t -> Hmap.t   val singleton : 'Hmap.key -> '-> Hmap.t   val rem : 'Hmap.key -> Hmap.t -> Hmap.t   val find : 'Hmap.key -> Hmap.t -> 'a option   val get : 'Hmap.key -> Hmap.t -> 'a   type binding = B : 'Hmap.key * '-> Hmap.binding   val iter : (Hmap.binding -> unit) -> Hmap.t -> unit   val fold : (Hmap.binding -> '-> 'a) -> Hmap.t -> '-> 'a   val for_all : (Hmap.binding -> bool) -> Hmap.t -> bool   val exists : (Hmap.binding -> bool) -> Hmap.t -> bool   val filter : (Hmap.binding -> bool) -> Hmap.t -> Hmap.t   val cardinal : Hmap.t -> int   val any_binding : Hmap.t -> Hmap.binding option   val get_any_binding : Hmap.t -> Hmap.binding   module type KEY_INFO = sig type 'a t end   module type S =     sig       type 'a key       module Key :         sig           type 'a info           val create : 'Hmap.S.Key.info -> 'Hmap.S.key           val info : 'Hmap.S.key -> 'Hmap.S.Key.info           type t           val hide_type : 'Hmap.S.key -> Hmap.S.Key.t           val equal : Hmap.S.Key.t -> Hmap.S.Key.t -> bool           val compare : Hmap.S.Key.t -> Hmap.S.Key.t -> int         end       type t       val empty : Hmap.S.t       val is_empty : Hmap.S.t -> bool       val mem : 'Hmap.S.key -> Hmap.S.t -> bool       val add : 'Hmap.S.key -> '-> Hmap.S.t -> Hmap.S.t       val singleton : 'Hmap.S.key -> '-> Hmap.S.t       val rem : 'Hmap.S.key -> Hmap.S.t -> Hmap.S.t       val find : 'Hmap.S.key -> Hmap.S.t -> 'a option       val get : 'Hmap.S.key -> Hmap.S.t -> 'a       type binding = B : 'Hmap.S.key * '-> Hmap.S.binding       val iter : (Hmap.S.binding -> unit) -> Hmap.S.t -> unit       val fold : (Hmap.S.binding -> '-> 'a) -> Hmap.S.t -> '-> 'a       val for_all : (Hmap.S.binding -> bool) -> Hmap.S.t -> bool       val exists : (Hmap.S.binding -> bool) -> Hmap.S.t -> bool       val filter : (Hmap.S.binding -> bool) -> Hmap.S.t -> Hmap.S.t       val cardinal : Hmap.S.t -> int       val any_binding : Hmap.S.t -> Hmap.S.binding option       val get_any_binding : Hmap.S.t -> Hmap.S.binding     end   module Make :     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 end