On Thu, Jun 18, 2009 at 9:55 PM, Ross Mellgren <span dir="ltr">&lt;<a href="mailto:rmm-haskell@z.odi.ac">rmm-haskell@z.odi.ac</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
It looks offhand like you&#39;re not being strict enough when you put things back in the IORef, and so it&#39;s building up thunks of (+1)...<br>
<br>
With two slight mods:<div class="im"><br>
<br>
   go 0 = return ()<br>
   go n = do modifyIORef ior (+1)<br>
             go (n-1)<br>
<br>
--&gt;<br>
<br>
   go 0 = return ()<br></div>
   go n = do modifyIORef ior (\ x -&gt; let x&#39; = x+1 in x `seq` x&#39;)<br>
             go (n-1)</blockquote><div><br>Just a slight prettification of that line:<br><br>modifyIORef ior ((1+) $!)<br><br>Or applied prefix if you prefer.  Prefix ($!) has the nice interpretation as the HOF that makes its argument into a strict function.<br>
<br>Luke</div></div><br>