> --- blocking versions
>       takeMVar :: MVar a -> IO a
>       putMVar  :: MVar a -> a -> IO ()
> 
> --- non-blocking versions
>       tryTakeMVar :: MVar a -> IO (Maybe a)
>       tryPutMVar  :: MVar a -> a -> IO Bool
> 
> --- current putMVar:
>       putMVarMayFail :: MVar a -> a -> IO ()
>       putMVarMayFail m a
>               = b <- tryPutMVar m a
>                 if b then throw PutFullMVar else return ()
                    / \
                   /     \
                   not b

Simon

Reply via email to