diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs
index 90382b717889a0be3858e9b539493f7850ef3dd4..16a44afd267203dd49cecec736e1aadf7e91e9be 100644
--- a/src/Quasar/Observable.hs
+++ b/src/Quasar/Observable.hs
@@ -114,6 +114,7 @@ class IsRetrievable v o => IsObservable v o | o -> v where
   mapObservable f = Observable . MappedObservable f
 
   {-# MINIMAL observe | oldObserve #-}
+  -- TODO the goal: {-# MINIMAL toObservable | observe #-}
 
 {-# DEPRECATED oldObserve "Old implementation of `observe`." #-}
 
@@ -372,8 +373,8 @@ instance IsObservable v (ObservableVar v) where
       disposeFn :: Unique -> IO ()
       disposeFn key = modifyMVar_ mvar (\(state, subscribers) -> pure (state, HM.delete key subscribers))
 
-newObservableVar :: v -> IO (ObservableVar v)
-newObservableVar initialValue = do
+newObservableVar :: MonadIO m => v -> m (ObservableVar v)
+newObservableVar initialValue = liftIO do
   ObservableVar <$> newMVar (initialValue, HM.empty)
 
 setObservableVar :: MonadIO m => ObservableVar v -> v -> m ()
@@ -382,7 +383,7 @@ setObservableVar (ObservableVar mvar) value = liftIO $ modifyMVar_ mvar $ \(_, s
   pure (value, subscribers)
 
 
--- TODO change inner monad to `m` after reimplementing ObservableVar
+-- TODO change function signature to pure or STM; swap v and a
 modifyObservableVar :: MonadIO m => ObservableVar v -> (v -> IO (v, a)) -> m a
 modifyObservableVar (ObservableVar mvar) f =
   liftIO $ modifyMVar mvar $ \(oldState, subscribers) -> do
@@ -390,7 +391,7 @@ modifyObservableVar (ObservableVar mvar) f =
     mapM_ (\callback -> callback (pure newState)) subscribers
     pure ((newState, subscribers), result)
 
--- TODO change inner monad to `m` after reimplementing ObservableVar
+-- TODO change update function signature to pure or STM
 modifyObservableVar_ :: MonadIO m => ObservableVar v -> (v -> IO v) -> m ()
 modifyObservableVar_ (ObservableVar mvar) f =
   liftIO $ modifyMVar_ mvar $ \(oldState, subscribers) -> do