Have you tried to compile your code with optimisations? I guess GHC&#39;s strictness analysis would find strict evaluation is better here.<br><br><br><div class="gmail_quote">2012/1/30 Joey Hess <span dir="ltr">&lt;<a href="mailto:joey@kitenet.net">joey@kitenet.net</a>&gt;</span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">Claude Heiland-Allen wrote:<br>
&gt; Control.Monad.State.Strict is strict in the actions, but the state<br>
&gt; itself is still lazy, so you end up building a huge thunk in the<br>
&gt; state containing all the updates that ever took place to the initial<br>
&gt; state.<br>
&gt;<br>
&gt; Using this should fix it:<br>
&gt;<br>
&gt; modify&#39; :: MonadState s m =&gt; (s -&gt; s) -&gt; m ()<br>
&gt; modify&#39; f = do<br>
&gt;   x &lt;- get<br>
&gt;   put $! f x  -- force the new state when storing it<br>
<br>
</div>Thanks!<br>
<br>
So, why does Control.Monad.State.Strict.modify not do that?<br>
<br>
And, I still don&#39;t quite understand why this only happened<br>
when the updated value is obtained using IO.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
see shy jo<br>
</font></span><br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br>