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