
Have you tried to compile your code with optimisations? I guess GHC's
strictness analysis would find strict evaluation is better here.
2012/1/30 Joey Hess
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
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe