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/
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe