From 927df97330132298d7e10e50a53bbe5232a2848d Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Sun, 13 Mar 2022 03:13:44 +0100 Subject: [PATCH] Use liftSTM instead of ensureSTM Co-authored-by: Jan Beinke <git@janbeinke.com> --- src/Quasar/Observable.hs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs index e2f0c65..7c69ac1 100644 --- a/src/Quasar/Observable.hs +++ b/src/Quasar/Observable.hs @@ -242,16 +242,15 @@ instance IsRetrievable r (LiftA2Observable r) where liftA2 fn (await x) (await y) instance IsObservable r (LiftA2Observable r) where - observe (LiftA2Observable fn fx fy) callback = do - -- TODO use alternative to ensureSTM - var0 <- ensureSTM $ newTVar Nothing - var1 <- ensureSTM $ newTVar Nothing + observe (LiftA2Observable fn fx fy) callback = ensureQuasarSTM do + var0 <- liftSTM $ newTVar Nothing + var1 <- liftSTM $ newTVar Nothing let callCallback = do - mergedValue <- ensureSTM $ runMaybeT $ liftA2 (liftA2 fn) (MaybeT (readTVar var0)) (MaybeT (readTVar var1)) + mergedValue <- liftSTM $ runMaybeT $ liftA2 (liftA2 fn) (MaybeT (readTVar var0)) (MaybeT (readTVar var1)) -- Run the callback only once both values have been received mapM_ callback mergedValue - observe fx (\update -> ensureSTM (writeTVar var0 (Just update)) >> callCallback) - observe fy (\update -> ensureSTM (writeTVar var1 (Just update)) >> callCallback) + observe fx (\update -> liftSTM (writeTVar var0 (Just update)) >> callCallback) + observe fy (\update -> liftSTM (writeTVar var1 (Just update)) >> callCallback) pingObservable (LiftA2Observable _ fx fy) = liftQuasarIO do -- LATER: keep backpressure for parallel network requests -- GitLab