packages feed

concurrent-state 0.4.0.0 → 0.4.1.0

raw patch · 5 files changed

+32/−20 lines, 5 files

Files

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