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