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 <j...@kitenet.net> > 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 > >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe