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