functor
  (K : Key) (D : sig
                   type key = K.t
                   type data
                   val name : string
                   val basename : key -> string
                   val compile : key -> string -> data
                 end->
  sig
    type key = D.key
    type data = D.data
    val get : key -> data
    val mem : key -> bool
    val clear : unit -> unit
    val remove : key -> unit
  end