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
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe