From e9ecda5ebfb2be5d0e2e4f36419ce56983c66606 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Sun, 13 Mar 2022 03:20:39 +0100
Subject: [PATCH] Call async only once for liftA2 Observable

Co-authored-by: Jan Beinke <git@janbeinke.com>
---
 src/Quasar/Observable.hs | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs
index 7c69ac1..c17c59b 100644
--- a/src/Quasar/Observable.hs
+++ b/src/Quasar/Observable.hs
@@ -237,9 +237,8 @@ data LiftA2Observable r = forall r0 r1. LiftA2Observable (r0 -> r1 -> r) (Observ
 instance IsRetrievable r (LiftA2Observable r) where
   retrieve (LiftA2Observable fn fx fy) = liftQuasarIO do
     -- LATER: keep backpressure for parallel network requests
-    x <- async $ retrieve fx
-    y <- async $ retrieve fy
-    liftA2 fn (await x) (await y)
+    future <- async $ retrieve fy
+    liftA2 fn (retrieve fx) (await future)
 
 instance IsObservable r (LiftA2Observable r) where
   observe (LiftA2Observable fn fx fy) callback = ensureQuasarSTM do
@@ -254,10 +253,9 @@ instance IsObservable r (LiftA2Observable r) where
 
   pingObservable (LiftA2Observable _ fx fy) = liftQuasarIO do
     -- LATER: keep backpressure for parallel network requests
-    x <- async $ pingObservable fx
-    y <- async $ pingObservable fy
-    await x
-    await y
+    future <- async $ pingObservable fy
+    pingObservable fx
+    await future
 
 
 --data BindObservable r = forall a. BindObservable (Observable a) (a -> Observable r)
-- 
GitLab