[Haskell-cafe] Spurious program crashes

Joel Reymont 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,  
> 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/







More information about the Haskell-Cafe mailing list