Actually, looking back, I&#39;m not sure mapM is even the right choice.  I think foldM would suffice.  All we&#39;re doing is finding the association pair with the minimum key, no?  In this case, foldM would do everything we need to...and State.Strict would be pretty good at that.<br>

<br clear="all">Louis Wasserman<br><a href="mailto:wasserman.louis@gmail.com">wasserman.louis@gmail.com</a><br><a href="http://profiles.google.com/wasserman.louis">http://profiles.google.com/wasserman.louis</a><br>
<br><br><div class="gmail_quote">On Thu, Mar 4, 2010 at 8:32 AM, Daniel Fischer <span dir="ltr">&lt;<a href="mailto:daniel.is.fischer@web.de">daniel.is.fischer@web.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Am Donnerstag 04 März 2010 04:20:05 schrieb Louis Wasserman:<br>
<div class="im">&gt; James,<br>
&gt;<br>
&gt; Which version of Control.Monad.State are you importing?<br>
&gt;<br>
&gt; If you&#39;re just importing vanilla Control.Monad.State, that&#39;s actually<br>
&gt; sending you to Control.Monad.State.Lazy.<br>
&gt;<br>
&gt; Using Control.Monad.State.Strict might solve your problems, srsly.<br>
&gt; Laziness can result in epically failing memory leaks.<br>
<br>
</div>That was my first thought too, but for this code, Control.Monad.State.Lazy<br>
is the better choice. Control.Monad.State.Strict doesn&#39;t play too well with<br>
sequence (and hence mapM). Since James consumes the list of chain lengths<br>
as it is produced (key = maximum keys), no large thunks can build up. With<br>
the strict State, he can&#39;t start to look for the maximum until all chain<br>
lengths have been computed, building a big fat thunk for the list.<br>
<div><div></div><div class="h5"><br>
&gt;<br>
&gt; Louis Wasserman<br>
&gt; <a href="mailto:wasserman.louis@gmail.com">wasserman.louis@gmail.com</a><br>
&gt; <a href="http://profiles.google.com/wasserman.louis" target="_blank">http://profiles.google.com/wasserman.louis</a><br>
<br>
</div></div></blockquote></div><br>