diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs index b63d55e5b05ead6af70c61623d4b9cc41d89e52f..7c9cdba4fbffda81de90968fff910c3b1f61e927 100644 --- a/src/Quasar/Awaitable.hs +++ b/src/Quasar/Awaitable.hs @@ -86,8 +86,10 @@ awaitResult :: (IsAwaitable r a, MonadAwait m) => m a -> m r awaitResult = (await =<<) -peekAwaitable :: (IsAwaitable r a, MonadIO m) => a -> m (Maybe (Either SomeException r)) -peekAwaitable awaitable = liftIO $ runMaybeT $ try $ runQueryT queryFn (runAwaitable awaitable) +-- | Returns the result (in a `Just`) when the awaitable is completed, throws an `Exception` when the awaitable is +-- failed and returns `Nothing` otherwise. +peekAwaitable :: (IsAwaitable r a, MonadIO m) => a -> m (Maybe r) +peekAwaitable awaitable = liftIO $ runMaybeT $ runQueryT queryFn (runAwaitable awaitable) where queryFn :: STM a -> MaybeT IO a queryFn transaction = MaybeT $ atomically $ (Just <$> transaction) `orElse` pure Nothing diff --git a/src/Quasar/Disposable.hs b/src/Quasar/Disposable.hs index 0abab6899c04442628673daf3c9c3f2d6028bfa7..2d776cc5c81469c7c8d0fa4d80eeb4eccb30f3d0 100644 --- a/src/Quasar/Disposable.hs +++ b/src/Quasar/Disposable.hs @@ -370,6 +370,5 @@ disposeEventually :: (IsDisposable a, MonadIO m) => ResourceManager -> a -> m () disposeEventually resourceManager disposable = liftIO $ do disposeCompleted <- dispose disposable peekAwaitable disposeCompleted >>= \case - Just (Left ex) -> throwIO ex - Just (Right ()) -> pure () + Just () -> pure () Nothing -> attachDisposable resourceManager disposable