From 38141ab52564b5cfbcf41eeee57918433ced6a0e Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Tue, 24 Aug 2021 18:47:22 +0200 Subject: [PATCH] Simplify `simpleAwaitable` signature --- src/Quasar/Awaitable.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs index 97eafd3..a004e80 100644 --- a/src/Quasar/Awaitable.hs +++ b/src/Quasar/Awaitable.hs @@ -113,8 +113,14 @@ successfulAwaitable = completedAwaitable . Right failedAwaitable :: SomeException -> Awaitable r failedAwaitable = completedAwaitable . Left -simpleAwaitable :: STM (Maybe (Either SomeException a)) -> Awaitable a -simpleAwaitable query = toAwaitable $ FnAwaitable $ querySTM query +-- | Create an awaitable from a `STM` transaction. +-- +-- Use `retry` to signal that the awaitable is not yet completed and `throwM`/`throwSTM` to set the awaitable to failed. +simpleAwaitable :: STM a -> Awaitable a +simpleAwaitable query = toAwaitable $ FnAwaitable $ querySTM do + (Just . Right <$> query) `orElse` pure Nothing + `catchAll` + \ex -> pure (Just (Left ex)) mapAwaitable :: IsAwaitable i a => (Either SomeException i -> Either SomeException r) -> a -> Awaitable r mapAwaitable fn awaitable = toAwaitable $ FnAwaitable $ fn <$> runAwaitable awaitable -- GitLab