tmapmvar 0.0.1 → 0.0.2
raw patch · 2 files changed
+11/−4 lines, 2 files
Files
- src/Control/Concurrent/STM/TMapMVar.hs +10/−3
- tmapmvar.cabal +1/−1
src/Control/Concurrent/STM/TMapMVar.hs view
@@ -9,7 +9,14 @@ import Control.Concurrent.STM.TMVar (TMVar, readTMVar, tryReadTMVar, newEmptyTMVar, takeTMVar, tryTakeTMVar, swapTMVar, putTMVar) +putForceTMVar :: TMVar a -> a -> STM ()+putForceTMVar t x = do+ q <- tryReadTMVar t+ case q of+ Nothing -> putTMVar t x+ Just _ -> () <$ swapTMVar t x + newtype TMapMVar k a = TMapMVar { getTMapMVar :: TVar (Map k (TMVar a)) }@@ -22,7 +29,7 @@ keys (TMapMVar m) = Map.keys <$> readTVar m peekElems :: TMapMVar k a -> STM [a]-peekElems t@(TMapMVar m) = do+peekElems (TMapMVar m) = do m' <- readTVar m let ts = Map.elems m' catMaybes <$> traverse tryReadTMVar ts@@ -38,7 +45,7 @@ insertForce :: (Ord k) => TMapMVar k a -> k -> a -> STM () insertForce t k a = do x <- getTMVar t k- void $ swapTMVar x a+ putForceTMVar x a -- | Blocks, and deletes upon looking it up@@ -64,7 +71,7 @@ tryReadTMVar x delete :: (Ord k) => TMapMVar k a -> k -> STM ()-delete t k = do+delete t k = void $ tryLookup t k
tmapmvar.cabal view
@@ -1,5 +1,5 @@ name: tmapmvar-version: 0.0.1+version: 0.0.2 synopsis: A single-entity stateful Map in STM, similar to tmapchan -- description: homepage: https://github.com/athanclark/tmapmvar#readme