added modify' to Control.Monad.State.Class
authorEdward Kmett <ekmett@gmail.com>
Mon, 5 May 2014 10:24:01 +0000 (20:24 +1000)
committerEdward Kmett <ekmett@gmail.com>
Mon, 5 May 2014 10:24:01 +0000 (20:24 +1000)
Control/Monad/State/Class.hs

index a6b5a68..4b9e181 100644 (file)
@@ -24,7 +24,8 @@
 module Control.Monad.State.Class (
     MonadState(..),
     modify,
-    gets,
+    modify',
+    gets
   ) where
 
 import Control.Monad.Trans.Cont
@@ -78,6 +79,11 @@ class Monad m => MonadState s m | m -> s where
 modify :: MonadState s m => (s -> s) -> m ()
 modify f = state (\s -> ((), f s))
 
+-- | A variant of 'modify' in which the computation is strict in the
+-- new state.
+modify' :: MonadState s m => (s -> s) -> m ()
+modify' f = state (\s -> let s' = f s in s' `seq` ((), s'))
+
 -- | Gets specific component of the state, using a projection function
 -- supplied.
 gets :: MonadState s m => (s -> a) -> m a