diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs index 7c9cdba4fbffda81de90968fff910c3b1f61e927..dac3d2b7b8c33547c784f69e81b41726bc8a08c1 100644 --- a/src/Quasar/Awaitable.hs +++ b/src/Quasar/Awaitable.hs @@ -1,10 +1,12 @@ module Quasar.Awaitable ( - -- * Awaitable + -- * MonadAwaitable MonadAwait(..), - IsAwaitable(..), - Awaitable, awaitResult, peekAwaitable, + + -- * Awaitable + IsAwaitable(..), + Awaitable, successfulAwaitable, failedAwaitable, completedAwaitable, @@ -58,20 +60,6 @@ import Data.Sequence import Quasar.Prelude -class IsAwaitable r a | a -> r where - runAwaitable :: (MonadQuerySTM m) => a -> m r - runAwaitable self = runAwaitable (toAwaitable self) - - cacheAwaitable :: MonadIO m => a -> m (Awaitable r) - cacheAwaitable self = cacheAwaitable (toAwaitable self) - - toAwaitable :: a -> Awaitable r - toAwaitable = Awaitable - - {-# MINIMAL toAwaitable | (runAwaitable, cacheAwaitable) #-} - - - class (MonadCatch m, MonadPlus m) => MonadAwait m where await :: IsAwaitable r a => a -> m r @@ -95,6 +83,20 @@ peekAwaitable awaitable = liftIO $ runMaybeT $ runQueryT queryFn (runAwaitable a queryFn transaction = MaybeT $ atomically $ (Just <$> transaction) `orElse` pure Nothing + +class IsAwaitable r a | a -> r where + runAwaitable :: (MonadQuerySTM m) => a -> m r + runAwaitable self = runAwaitable (toAwaitable self) + + cacheAwaitable :: MonadIO m => a -> m (Awaitable r) + cacheAwaitable self = cacheAwaitable (toAwaitable self) + + toAwaitable :: a -> Awaitable r + toAwaitable = Awaitable + + {-# MINIMAL toAwaitable | (runAwaitable, cacheAwaitable) #-} + + data Awaitable r = forall a. IsAwaitable r a => Awaitable a instance IsAwaitable r (Awaitable r) where diff --git a/src/Quasar/Disposable.hs b/src/Quasar/Disposable.hs index 2cac4d609e2b44c3920c8e3f623d11b1b9510ced..9cb1777d4a35c6c689efd056d241566286e133b9 100644 --- a/src/Quasar/Disposable.hs +++ b/src/Quasar/Disposable.hs @@ -8,19 +8,21 @@ module Quasar.Disposable ( noDisposable, alreadyDisposing, + -- * MonadResourceManager + MonadResourceManager(..), + disposeEventually, + withOnResourceManager, + onResourceManager, + -- ** ResourceManager - ResourceManager, IsResourceManager(..), - MonadResourceManager(..), + ResourceManager, withResourceManager, - withOnResourceManager, newResourceManager, unsafeNewResourceManager, - onResourceManager, attachDisposable, attachDisposeAction, attachDisposeAction_, - disposeEventually, -- * Task Task(..),