diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs index cfc58f6b3a187310ff0c152a6a2be5023824646d..424f67f2b85596e2a917425ca15d5434f5ea45ec 100644 --- a/src/Quasar/Awaitable.hs +++ b/src/Quasar/Awaitable.hs @@ -44,6 +44,7 @@ module Quasar.Awaitable ( failAsyncVarSTM_, putAsyncVarEitherSTM_, readAsyncVarSTM, + tryReadAsyncVarSTM, ) where import Control.Applicative (empty) @@ -365,6 +366,9 @@ putAsyncVarEitherSTM (AsyncVar var) = tryPutTMVar var readAsyncVarSTM :: AsyncVar a -> STM a readAsyncVarSTM (AsyncVar var) = either throwM pure =<< readTMVar var +tryReadAsyncVarSTM :: forall a. AsyncVar a -> STM (Maybe a) +tryReadAsyncVarSTM (AsyncVar var) = mapM (either throwM pure) =<< tryReadTMVar var + putAsyncVar :: MonadIO m => AsyncVar a -> a -> m Bool putAsyncVar var = putAsyncVarEither var . Right