Brian Denheyer &lt;<a href="mailto:briand@aracnet.com">briand@aracnet.com</a>&gt; writes:<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;">
<div class="im">
<br>
&gt;&gt;&gt;&gt;&gt; doEvent f usDelay = forkIO $<br>
&gt;&gt;&gt;&gt;&gt;   threadDelay usDelay<br>
&gt;&gt;&gt;&gt;&gt;   doEvent f usDelay<br>
&gt;&gt;&gt;&gt;&gt;   f<br>
<br>
</div>There&#39;s a missing &#39;do&#39; here, right?<br></blockquote><div><br>Yes - I said that in a later e-mail but it doesn&#39;t fix me violating my own peeve about non-functional code snippits on -cafe.<br><br> </div>
<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">
&gt;&gt; Infinite loop?  yes, that is what you wanted.  Memory gobbling?  Why<br>
&gt;&gt; would you think that?<br>
<br>
</div><div class="im">&gt; Why would I think that ?<br>
<br>
</div><div class="im">&gt; doEvent f usDelay = do forkIO $ threadDelay usDelay<br>
&gt;                        doEvent f usDelay<br>
&gt;                        f<br>
<br>
</div>Are you sure this isn&#39;t interpreted as:<br>
<div class="im"><br>
    doEvent f usDelay = do (forkIO $ threadDelay usDelay)<br>
                           doEvent f usDelay<br>
                           f<br></div></blockquote><div><br>The full code I ran and thought we were talking about (more or less) is inline here.  For clarity - yes I know they are different in that one executes &#39;f&#39; before the first sleep and the other does not.<br>
<br>------------- START CODE -----------------<br>import Control.Concurrent<br>import Control.Monad (forever)<br>import System.IO (hFlush, stdout)<br><br>doEvent f usDelay = forkIO $ do<br>   threadDelay usDelay<br>   doEvent f usDelay<br>
   f<br><br><br>doEvent2 f usDelay = do<br>        forkIO f<br>        threadDelay usDelay<br>        doEvent2 f usDelay<br><br>main = do doEvent func 1000000 &gt;&gt; forever (threadDelay maxBound)<br><br>main2 = do doEvent2 func 1000000 &gt;&gt; forever (threadDelay maxBound)<br>
<br>func = putStr &quot;.&quot; &gt;&gt; hFlush stdout<br>----------------------- END CODE -------------------<br><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I.e. just forking off processes that only does a delay, never even<br>
getting to &#39;f&#39;?<br></blockquote><div><br>The version you referenced is a little weird but so long as you fix the indentation it should be fine (drop &quot;forkIO $ f&quot; to the next line).<br><br>Cheers,<br>Thomas<br>
</div></div>