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