functor
  (K : Key) (D : sig
                   type key = K.t
                   type data
                   val name : string
                   val compile : key -> data
                 end->
  sig type key = D.key type data = D.data val get : key -> data end