diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs index ccdc225d4586c914342005d53615a1e2c87f3d8b..2063bed4b1032e6016e8ee0e2797ed3d52e0f541 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),