packages feed

tmapmvar 0.0.1 → 0.0.2

raw patch · 2 files changed

+11/−4 lines, 2 files

Files

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