packages feed

concurrent-state 0.3.0.0 → 0.3.1.0

raw patch · 3 files changed

+15/−13 lines, 3 files

Files

concurrent-state.cabal view
@@ -1,5 +1,5 @@ name:                concurrent-state-version:             0.3.0.0+version:             0.3.1.0 synopsis:            MTL-like library using TVars description:         State and Writer backed by TVars. homepage:            https://github.com/joelteon/concurrent-state
src/Control/Monad/State/Concurrent/Lazy.hs view
@@ -77,12 +77,13 @@         _runStateC (k a) s'  instance (Functor m, MonadIO m) => MonadState s (StateC s m) where-    get = StateC $ \s -> do-        m <- liftIO (readTVarIO s)-        return (m, s)-    put s = StateC $ \tv -> do-        liftIO . atomically $ swapTVar tv s-        return ((), tv)+    state f = StateC $ \tv -> do+        newval <- liftIO . atomically $ do+            old <- readTVar tv+            let ~(a, s) = f old+            swapTVar tv s+            return a+        return (newval, tv)  instance (MonadIO m, MonadFix m) => MonadFix (StateC s m) where     mfix f = StateC $ \s -> mfix $ \ ~(a, _) -> _runStateC (f a) s
src/Control/Monad/State/Concurrent/Strict.hs view
@@ -78,12 +78,13 @@         _runStateC (k a) s'  instance (Functor m, MonadIO m) => MonadState s (StateC s m) where-    get = StateC $ \s -> do-        m <- liftIO (readTVarIO s)-        return (m, s)-    put s = StateC $ \tv -> do-        liftIO . atomically $ swapTVar tv s-        return ((), tv)+    state f = StateC $ \tv -> do+        newval <- liftIO . atomically $ do+            old <- readTVar tv+            let (a, s) = f old+            swapTVar tv s+            return a+        return (newval, tv)  instance (MonadIO m, MonadFix m) => MonadFix (StateC s m) where     mfix f = StateC $ \s -> mfix $ \(a, _) -> _runStateC (f a) s