diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs
index ac809fd21ecd23066a7f095f9c927a695d5b3b4f..120051fb40a715e54d078e4aded246bde8f43973 100644
--- a/src/Quasar/Observable.hs
+++ b/src/Quasar/Observable.hs
@@ -59,6 +59,11 @@ instance Applicative ObservableMessage where
   liftA2 _ _ (ObservableNotAvailable ex) = ObservableNotAvailable ex
   liftA2 _ _ ObservableLoading = ObservableLoading
 
+instance Monad ObservableMessage where
+  (ObservableUpdate x) >>= fn = fn x
+  ObservableLoading >>= _ = ObservableLoading
+  (ObservableNotAvailable ex) >>= _ = ObservableNotAvailable ex
+
 
 toObservableUpdate :: MonadThrow m => ObservableMessage a -> m (Maybe a)
 toObservableUpdate (ObservableUpdate value) = pure $ Just value