[Haskell-cafe] Spurious program crashes
Joel Reymont
joelr1 at gmail.com
Mon Nov 21 17:41:38 EST 2005
STM would complicate things too much for me. At least I think so. I
would love to use STM but I would need to fit it into "type
ScriptState = ErrorT String (StateT World IO)" just to use the
logger. I'm not THAT comfortable with monads.
Let me see if I understand you correctly... Are you saying that I
should be using getChanContents in the code below?
logger :: Handle -> MVar () -> IO ()
logger h die =
do empty <- isEmptyChan parent
unless empty $ do x <- readChan parent
putStrLn x
hPutStrLn h x
alive <- isEmptyMVar die
when (alive || not empty) $ logger h die
I think using Maybe is a great trick but I'm curious why so few
messages actually get taken out of the channel in the code above? Are
you saing that with all the checking it does not get to pull messages
out?
I see clearly how using Maybe with getChanContents will work out
perfectly. I don't understand why the above code is inefficient to
the point of printing just a few messages (out of hundreds) out on
Windows. I would like to understand it to avoid such mistakes in the
future.
Thanks, Joel
On Nov 21, 2005, at 9:56 PM, Tomasz Zielonka wrote:
> You seem to be busy waiting. I can see two ways of solving the
> problem:
> 1. use STM and non-deterministic choice
> 2. use a (Chan (Maybe String)), where (Just s) means the next log
> entry, and Nothing means "break the logger loop"
--
http://wagerlabs.com/
More information about the Haskell-Cafe
mailing list