packages feed

cache-polysemy 0.1.1 → 0.1.2

raw patch · 2 files changed

+61/−2 lines, 2 files

Files

cache-polysemy.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: bbfeaacd25354057ddf0c42d9376394235b2c38637b3e5290009ef4d025cf777+-- hash: bab52d012830e3889f818b644fb55b9a8d1dfa6fe05fd38449972264a4814ba7  name:           cache-polysemy-version:        0.1.1+version:        0.1.2 synopsis:       cached hashmaps description:    An polysemy interface for cached hashmaps and an interpreter implemented using <https://hackage.haskell.org/package/cache cache> category:       Cache
src/Polysemy/Cache.hs view
@@ -118,6 +118,50 @@     cache <- atomicGet     atomicPut $ C.setDefaultExpiration cache ts +-- | Alternative version of 'runCacheAtomicState' that uses 'Final' instead of 'Embed'+runCacheAtomicState' ::+  forall k v r a.+  Members '[Final IO, AtomicState (C.Cache k v)] r =>+  Sem (Cache k v ': r) a ->+  Sem r a+runCacheAtomicState' = interpret $ \case+  Insert k v -> do+    cache <- atomicGet+    embedFinal $ C.insert cache k v+  Insert' ts k v -> do+    cache <- atomicGet+    embedFinal $ C.insert' cache ts k v+  Lookup k -> do+    cache <- atomicGet+    embedFinal $ C.lookup cache k+  Lookup' k -> do+    cache <- atomicGet+    embedFinal $ C.lookup cache k+  Keys -> do+    cache <- atomicGet+    embedFinal $ C.keys cache+  Delete k -> do+    cache <- atomicGet+    embedFinal $ C.delete cache k+  FilterWithKey pred -> do+    cache <- atomicGet+    embedFinal $ C.filterWithKey pred cache+  Purge -> do+    cache <- atomicGet+    embedFinal $ C.purge cache+  PurgeExpired -> do+    cache <- atomicGet+    embedFinal $ C.purgeExpired cache+  Size -> do+    cache <- atomicGet+    embedFinal $ C.size cache+  DefaultExipration -> do+    cache <- atomicGet+    pure $ C.defaultExpiration cache+  SetDefaultExpiration ts -> do+    cache <- atomicGet+    atomicPut $ C.setDefaultExpiration cache ts+ -- | Run a 'Cache', given a default expiration time. runCache ::   forall k v r a.@@ -131,3 +175,18 @@   eff     & runCacheAtomicState     & runAtomicStateIORef ref++-- | Alternative version of 'runCache' that uses 'Final' instead of 'Embed'+runCache' ::+  forall k v r a.+  Members '[Final IO] r =>+  Maybe TimeSpec ->+  Sem (Cache k v ': AtomicState (C.Cache k v) ': Embed IO ': r) a ->+  Sem r a+runCache' ts eff = do+  cache <- embedFinal $ C.newCache ts+  ref <- embedFinal $ newIORef cache+  eff+    & runCacheAtomicState+    & runAtomicStateIORef ref+    & embedToFinal