The reason I ask is that I plan on making a simulation, which will run until the user decides to pause.<br><br>Potentially, I could keep state and update it, but that doesn&#39;t seem haskelly.  With an infinite list, I even get history for free.<br>
<br><div class="gmail_quote">On Mon, Sep 13, 2010 at 7:34 PM, Felipe Lessa <span dir="ltr">&lt;<a href="mailto:felipe.lessa@gmail.com">felipe.lessa@gmail.com</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;">
<div class="im">On Mon, Sep 13, 2010 at 7:53 PM, Alex Rozenshteyn &lt;<a href="mailto:rpglover64@gmail.com">rpglover64@gmail.com</a>&gt; wrote:<br>
&gt; Is there a way to take a given monad&#39;s bind and wrap it to make it more<br>
&gt; lazy?  It doesn&#39;t seem like there should be, but I&#39;m being hopeful.<br>
<br>
</div>I wouldn&#39;t bother with that.  Just write the following and be happy =).<br>
<br>
iterateM :: (Monad m) =&gt; Int -&gt; (a -&gt; m a) -&gt; a -&gt; m [a]<br>
iterateM 0 _ _ = return []<br>
iterateM n act start = do<br>
   next &lt;- act start<br>
   rest &lt;- iterateM (n-1) act next<br>
   return (start : rest)<br>
<br>
However, I think the answer of your question is &quot;no&quot;.  And in cases<br>
where you can do something similar (e.g. in IO you can use<br>
unsafeInterleaveIO), most of the time it isn&#39;t the best solution.<br>
<br>
Cheers!<br>
<br>
--<br>
<font color="#888888">Felipe.<br>
</font></blockquote></div><br><br clear="all"><br>-- <br><div dir="ltr"><div>          Alex R</div></div><br>