diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs index 14992a8472c49faf3f0c95668a32620f1ff13c46..ddbd64978f2516883f1fb94e9000a7ad5bfef53c 100644 --- a/src/Quasar/Awaitable.hs +++ b/src/Quasar/Awaitable.hs @@ -2,6 +2,7 @@ module Quasar.Awaitable ( -- * MonadAwaitable MonadAwait(..), peekAwaitable, + awaitSTM, -- * Awaitable IsAwaitable(toAwaitable), @@ -76,6 +77,8 @@ instance MonadAwait IO where `catch` \BlockedIndefinitelyOnSTM -> throwM BlockedIndefinitelyOnAwait +-- | `awaitSTM` exists as an explicit alternative to an `Awaitable STM`-instance, to prevent code which creates- and +-- then awaits resources without knowing it's running in STM (which would block indefinitely when run in STM). awaitSTM :: Awaitable a -> STM a awaitSTM (toAwaitable -> Awaitable x) = x `catch` \BlockedIndefinitelyOnSTM -> throwM BlockedIndefinitelyOnAwait