From 4d1f1ded5c501c163bd09502bc22535866911127 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Wed, 25 Aug 2021 02:07:08 +0200 Subject: [PATCH] Add tryAwaitIO --- src/Quasar/Awaitable.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs index 499a754..98f50d0 100644 --- a/src/Quasar/Awaitable.hs +++ b/src/Quasar/Awaitable.hs @@ -3,6 +3,7 @@ module Quasar.Awaitable ( IsAwaitable(..), MonadQuerySTM(querySTM), awaitIO, + tryAwaitIO, peekAwaitable, Awaitable, successfulAwaitable, @@ -57,7 +58,10 @@ class IsAwaitable r a | a -> r where awaitIO :: (IsAwaitable r a, MonadIO m) => a -> m r -awaitIO awaitable = liftIO $ either throwIO pure =<< runQueryT (atomically . (maybe retry pure =<<)) (runAwaitable awaitable) +awaitIO awaitable = liftIO $ either throwIO pure =<< tryAwaitIO awaitable + +tryAwaitIO :: (IsAwaitable r a, MonadIO m) => a -> m (Either SomeException r) +tryAwaitIO awaitable = liftIO $ runQueryT (atomically . (maybe retry pure =<<)) (runAwaitable awaitable) peekAwaitable :: (IsAwaitable r a, MonadIO m) => a -> m (Maybe (Either SomeException r)) peekAwaitable awaitable = liftIO $ runMaybeT $ runQueryT (MaybeT . atomically) (runAwaitable awaitable) -- GitLab