try +stm

tryPeekTChan :: TChan a -> STM (Maybe a)
stm Control.Concurrent.STM.TChan
A version of peekTChan which does not retry. Instead it returns Nothing if no value is available.
tryPutTMVar :: TMVar a -> a -> STM Bool
stm Control.Concurrent.STM.TMVar
A version of putTMVar that does not retry. The tryPutTMVar function attempts to put the value a into the TMVar, returning True if it was successful, or False otherwise.
tryReadTChan :: TChan a -> STM (Maybe a)
stm Control.Concurrent.STM.TChan
A version of readTChan which does not retry. Instead it returns Nothing if no value is available.
tryReadTMVar :: TMVar a -> STM (Maybe a)
stm Control.Concurrent.STM.TMVar
A version of readTMVar which does not retry. Instead it returns Nothing if no value is available.
tryTakeTMVar :: TMVar a -> STM (Maybe a)
stm Control.Concurrent.STM.TMVar
A version of takeTMVar that does not retry. The tryTakeTMVar function returns Nothing if the TMVar was empty, or Just a if the TMVar was full with contents a. After tryTakeTMVar, the TMVar is left empty.
retry :: STM a
stm Control.Monad.STM
Retry execution of the current memory transaction because it has seen values in TVars which mean that it should not continue (e.g. the TVars represent a shared buffer that is now empty). The implementation may block the thread until one of the TVars that it has read from has been udpated. (GHC only)