[Haskell-cafe] Spurious program crashes
joelr1 at gmail.com
Wed Nov 23 08:29:17 EST 2005
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,
> then exits. Is that what you wanted, or did you want it to keep
> 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
logger :: Handle -> IO ()
logger h =
do ss <- getChanContents parent
where logger'  = return ()
logger' (Nothing:_) = return ()
logger' ((Just x):xs) =
do putStrLn x
hPutStrLn h x
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).
More information about the Haskell-Cafe