From 81710d78aedafd22ebcb83996e4376c9d117cbe0 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Sun, 13 Mar 2022 00:55:22 +0100
Subject: [PATCH] Implement parallel retrieve for liftA2 on Observable

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

diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs
index c127fef..f7fa45e 100644
--- a/src/Quasar/Observable.hs
+++ b/src/Quasar/Observable.hs
@@ -229,8 +229,11 @@ instance IsObservable v (MappedObservable v) where
 data LiftA2Observable r = forall r0 r1. LiftA2Observable (r0 -> r1 -> r) (Observable r0) (Observable r1)
 
 instance IsRetrievable r (LiftA2Observable r) where
-  retrieve (LiftA2Observable fn fx fy) =
-    liftA2 fn (retrieve fx) (retrieve fy)
+  retrieve (LiftA2Observable fn fx fy) = do
+    -- LATER: keep backpressure for parallel network requests
+    x <- async $ retrieve fx
+    y <- async $ retrieve fy
+    liftIO $ liftA2 fn (await x) (await y)
 
 instance IsObservable r (LiftA2Observable r) where
   observe (LiftA2Observable fn fx fy) callback = do
-- 
GitLab