concurrent-state 0.4.0.0 → 0.4.1.0
raw patch · 5 files changed
+32/−20 lines, 5 files
Files
- changelog +4/−0
- concurrent-state.cabal +1/−1
- src/Control/Concurrent/Lifted/Fork.hs +11/−1
- src/Control/Monad/State/Concurrent/Lazy.hs +8/−9
- src/Control/Monad/State/Concurrent/Strict.hs +8/−9
changelog view
@@ -1,3 +1,7 @@+0.4.1.0+-------+* Add forkWithUnmask, forkOnWithUnmask to Control.Concurrent.Lifted.Fork+ 0.4.0.0 ------- * MonadFork (adds `exceptions' dependency)
concurrent-state.cabal view
@@ -1,5 +1,5 @@ name: concurrent-state-version: 0.4.0.0+version: 0.4.1.0 synopsis: MTL-like library using TVars description: State backed by TVar. homepage: https://github.com/joelteon/concurrent-state
src/Control/Concurrent/Lifted/Fork.hs view
@@ -10,7 +10,9 @@ ----------------------------------------------------------------------------- module Control.Concurrent.Lifted.Fork ( MonadFork(..),- forkFinally+ forkFinally,+ forkWithUnmask,+ forkOnWithUnmask ) where import qualified Control.Concurrent as C@@ -37,3 +39,11 @@ forkFinally :: MonadFork m => m a -> (Either SomeException a -> m ()) -> m C.ThreadId forkFinally action andThen = mask $ \restore -> fork $ try (restore action) >>= andThen++-- | Generalized 'C.forkIOWithUnmask'.+forkWithUnmask :: MonadFork m => ((forall a. m a -> m a) -> m ()) -> m C.ThreadId+forkWithUnmask = fork . mask++-- | Generalized 'C.forkOnWithUnmask'.+forkOnWithUnmask :: MonadFork m => Int -> ((forall a. m a -> m a) -> m ()) -> m C.ThreadId+forkOnWithUnmask i = forkOn i . mask
src/Control/Monad/State/Concurrent/Lazy.hs view
@@ -108,15 +108,14 @@ q u (StateC f) = StateC (u . f) instance MonadFork m => MonadFork (StateC s m) where- fork (StateC m) = StateC $ \tv -> do- tid <- fork (liftM fst $ m tv)- return (tid, tv)- forkOn i (StateC m) = StateC $ \tv -> do- tid <- forkOn i (liftM fst $ m tv)- return (tid, tv)- forkOS (StateC m) = StateC $ \tv -> do- tid <- forkOS (liftM fst $ m tv)- return (tid, tv)+ fork = liftFork fork+ forkOn i = liftFork (forkOn i)+ forkOS = liftFork forkOS++liftFork :: Monad m => (m r -> m a) -> StateC t m r -> StateC t m a+liftFork f (StateC m) = StateC $ \tv -> do+ tid <- f (liftM fst $ m tv)+ return (tid, tv) -- | Unwrap a concurrent state monad computation as a function. runStateC :: MonadIO m
src/Control/Monad/State/Concurrent/Strict.hs view
@@ -109,15 +109,14 @@ q u (StateC f) = StateC (u . f) instance MonadFork m => MonadFork (StateC s m) where- fork (StateC m) = StateC $ \tv -> do- tid <- fork (liftM fst $ m tv)- return (tid, tv)- forkOn i (StateC m) = StateC $ \tv -> do- tid <- forkOn i (liftM fst $ m tv)- return (tid, tv)- forkOS (StateC m) = StateC $ \tv -> do- tid <- forkOS (liftM fst $ m tv)- return (tid, tv)+ fork = liftFork fork+ forkOn i = liftFork (forkOn i)+ forkOS = liftFork forkOS++liftFork :: Monad m => (m r -> m a) -> StateC t m r -> StateC t m a+liftFork f (StateC m) = StateC $ \tv -> do+ tid <- f (liftM fst $ m tv)+ return (tid, tv) -- | Unwrap a concurrent state monad computation as a function. runStateC :: MonadIO m