From 2e0b8e988b66e37396e2c737030b88c2e332501b Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Wed, 7 Oct 2020 00:24:12 +0200
Subject: [PATCH] Implement joinObservableWith

---
 src/lib/Qd/Observable.hs | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs
index ccdc225..2063bed 100644
--- a/src/lib/Qd/Observable.hs
+++ b/src/lib/Qd/Observable.hs
@@ -15,6 +15,7 @@ module Qd.Observable (
   setBasicObservable,
   updateBasicObservable,
   joinObservable,
+  joinObservableWith,
   FnObservable(..),
 ) where
 
@@ -142,7 +143,13 @@ instance forall o i v. (Observable i o, Observable v i) => Observable v (JoinedO
           unsubscribe outerSubscription
 
 joinObservable :: (Observable i o, Observable v i) => o -> SomeObservable v
-joinObservable outer = SomeObservable $ JoinedObservable outer
+joinObservable = SomeObservable . JoinedObservable
+
+joinObservableWith :: forall a o v i. (Observable a o, Observable v i) => (a -> i) -> o -> SomeObservable v
+joinObservableWith transform = SomeObservable . JoinedObservable . MappedObservable mapFn
+  where
+    mapFn :: ObservableState a -> IO (ObservableState i)
+    mapFn = return . fmap transform
 
 data FnObservable v = FnObservable {
   getValueFn :: IO (ObservableState v),
-- 
GitLab