diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs index 947ea32f5aafd96c93fc14ca147a8f57eb0bc076..ccdc225d4586c914342005d53615a1e2c87f3d8b 100644 --- a/src/lib/Qd/Observable.hs +++ b/src/lib/Qd/Observable.hs @@ -54,6 +54,14 @@ subscribe' observable callback = mfix $ \subscription -> subscribe observable (c type ObservableCallback v = ObservableMessage v -> IO () +instance Observable v o => Observable v (IO o) where + getValue :: IO o -> IO (ObservableState v) + getValue getObservable = getValue =<< getObservable + subscribe :: IO o -> (ObservableMessage v -> IO ()) -> IO SubscriptionHandle + subscribe getObservable callback = do + observable <- getObservable + subscribe observable callback + -- | Existential quantification wrapper for the Observable type class. data SomeObservable v = forall o. Observable v o => SomeObservable o