(defcache BasicCache [cache]
CacheProtocol
(lookup [_ item]
(get cache item))
(lookup [_ item not-found]
(get cache item not-found))
(has? [_ item]
(contains? cache item))
(hit [this item] this)
(miss [_ item result]
(BasicCache. (assoc cache item result)))
(evict [_ key]
(BasicCache. (dissoc cache key)))
(seed [_ base]
(BasicCache. base))
Object
(toString [_] (str cache)))