On Nov 23, 2005, at 1:18 PM, Simon Marlow wrote:

After subsequent dicsussion, do you still think something strange was
going on here?

Yes, but in a different thread. The "Postmortem" one.

so this basically loops until there are no messages in the channel, and then exits. Is that what you wanted, or did you want it to keep reading
from the channel until told to die?

I probably made a mistake someplace as I wanted to read until told to die but ONLY if the channel was empty. I replaced that code with Tomasz's elegant solution so now I read until Nothing is read from the channel.

logger :: Handle -> IO ()
logger h =
    do ss <- getChanContents parent
       logger' ss
       where logger' [] = return ()
             logger' (Nothing:_) = return ()
             logger' ((Just x):xs) =
                 do putStrLn x
                    hPutStrLn h x
                    logger' xs
                    yield

For whatever reason this generates empty lines with some sort of an unprintable character at the beginning. It prints these to the screen but not to the file. Of course it also prints what it's supposed to but the garbage shows both on Windows and the Mac.

STM is a better solution, as already suggested.  Without STM, the best
way to do this is to multiplex everything into a single channel (i.e.
send the die message down the channel).

Right.

        Thanks, Joel

--
http://wagerlabs.com/





_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to