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