functor   (Key : sig            type t            val equal : t -> t -> bool            val hash : t -> int            val to_string : Type.t -> string          end) (Info : sig type 'a t end->   sig     type key = Key.t     type 'a info = 'Info.t     type t     val create : int -> t     val add : t -> key -> 'a ty -> 'a info -> unit     exception Unbound_value of string     exception Incompatible_type of string     val find : t -> key -> 'a ty -> 'a info     val iter : (key -> 'a ty -> 'a info -> unit) -> t -> unit     val fold : (key -> 'a ty -> 'a info -> '-> 'b) -> t -> '-> 'b   end