
29 Jan
2012
29 Jan
'12
9:36 p.m.
Claude Heiland-Allen wrote:
Control.Monad.State.Strict is strict in the actions, but the state itself is still lazy, so you end up building a huge thunk in the state containing all the updates that ever took place to the initial state.
Using this should fix it:
modify' :: MonadState s m => (s -> s) -> m () modify' f = do x <- get put $! f x -- force the new state when storing it
Thanks! So, why does Control.Monad.State.Strict.modify not do that? And, I still don't quite understand why this only happened when the updated value is obtained using IO. -- see shy jo