[email protected]
[Top] [All Lists]

Re: [Haskell-cafe] scheduling an alarm

Subject: Re: [Haskell-cafe] scheduling an alarm
From: Thomas DuBuisson
Date: Thu, 28 Jan 2010 00:15:55 -0800
Brian Denheyer <[email protected]> writes:

>>>>> doEvent f usDelay = forkIO $
>>>>>   threadDelay usDelay
>>>>>   doEvent f usDelay
>>>>>   f

There's a missing 'do' here, right?

Yes - I said that in a later e-mail but it doesn't fix me violating my own peeve about non-functional code snippits on -cafe.

>> Infinite loop?  yes, that is what you wanted.  Memory gobbling?  Why
>> would you think that?

> Why would I think that ?

> doEvent f usDelay = do forkIO $ threadDelay usDelay
>                        doEvent f usDelay
>                        f

Are you sure this isn't interpreted as:

   doEvent f usDelay = do (forkIO $ threadDelay usDelay)
                          doEvent f usDelay

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 'f' before the first sleep and the other does not.

------------- START CODE -----------------
import Control.Concurrent
import Control.Monad (forever)
import System.IO (hFlush, stdout)

doEvent f usDelay = forkIO $ do
   threadDelay usDelay
   doEvent f usDelay

doEvent2 f usDelay = do
        forkIO f
        threadDelay usDelay
        doEvent2 f usDelay

main = do doEvent func 1000000 >> forever (threadDelay maxBound)

main2 = do doEvent2 func 1000000 >> forever (threadDelay maxBound)

func = putStr "." >> hFlush stdout
----------------------- END CODE -------------------

I.e. just forking off processes that only does a delay, never even
getting to 'f'?

The version you referenced is a little weird but so long as you fix the indentation it should be fine (drop "forkIO $ f" to the next line).

Haskell-Cafe mailing list
[email protected]
<Prev in Thread] Current Thread [Next in Thread>