withLruCache :: (Monad m, Eq k)
             => (Cache (StateT [k] m) k v -> StateT [k] m a)
             -> (Cache m k v -> m a)
withLruCache body c = evalStateT (body $ lruCache c) []
withLruCache :: (Monad m, Eq k)
             => (Cache (StateT [k] m) k v -> StateT [k] m a)
             -> (Cache m k v -> m a)
withLruCache body c = evalStateT (body $ lruCache c) []
withLruCache body c = evalStateT (body $ lruCache c) []