[Haskell-cafe] Spurious program crashes

Joel Reymont joelr1 at gmail.com
Tue Nov 22 03:30:33 EST 2005


I was under the impression that STM code needed to be in its own  
monad. I was looking at Control.Concurrent.STM.TChan, for example,  
where signatures like this exist:

newTChan :: STM (TChan a)	
readTChan :: TChan a -> STM a	
writeTChan :: TChan a -> a -> STM ()	

and then

newTChan :: STM (TChan a)	
readTChan :: TChan a -> STM a	
writeTChan :: TChan a -> a -> STM ()	


I guess I should give this another look, re-read the STM paper and  
check out your patch.

Regardless, simple is elegant and your Maybe solution is simple.

	Thanks, Joel

On Nov 22, 2005, at 7:09 AM, Tomasz Zielonka wrote:

> I am talking about Software Transactional Memory, which is in
> Control.Concurrent.STM. I think you confused it with State
> Transformer Monad.
>
> In your case STM would allow you to wait simultaneously on (T)MVar and
> (T)Chan. It would look like this:
>
>     logger :: TMVar () -> IO ()
>     logger die =
>         join $ atomically $
>             (do x <- readTChan parent
>                 return $ do
>                     putStrLn x
>                     logger die)
>             `orElse`
>             (do takeTMVar die
>                 return (return ()))

--
http://wagerlabs.com/







More information about the Haskell-Cafe mailing list