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