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 <[email protected]> > 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 > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
