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

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to