summaryrefslogtreecommitdiff
path: root/src/Cache.hs
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2026-04-06 23:35:05 +0200
committerTom Smeding <tom@tomsmeding.com>2026-04-06 23:36:28 +0200
commit287d9e5c4fc50bcca2474b9783148181d7ede872 (patch)
tree81a80cc5f5aabb2d3cffd3874438782d32096cff /src/Cache.hs
parent875da72c83b20260ac5af2bdcc8b992d657fd97e (diff)
Log watching
Diffstat (limited to 'src/Cache.hs')
-rw-r--r--src/Cache.hs4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/Cache.hs b/src/Cache.hs
index 4694aa0..d272112 100644
--- a/src/Cache.hs
+++ b/src/Cache.hs
@@ -26,6 +26,10 @@ cacheAdd cache@(Cache maxsize ref _) key val = do
cacheLookup :: Ord k => Cache k v -> k -> IO (Maybe v)
cacheLookup (Cache _ ref _) key = fmap fst . Map.lookup key <$> readIORef ref
+cacheInvalidate :: Ord k => Cache k v -> k -> IO ()
+cacheInvalidate (Cache _ ref _) key =
+ atomicModifyIORef' ref $ \mp -> (Map.delete key mp, ())
+
-- Uses 2-random LRU (https://danluu.com/2choices-eviction/)
cachePrune :: Ord k => Cache k v -> IO ()
cachePrune (Cache maxsize ref genref) = do go =<< atomicModifyIORef' genref splitGen