From 8d905326d91d874308fd96961ac87cfcd0d574b1 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Sun, 24 Apr 2022 19:38:02 +0200
Subject: [PATCH] Remove pingObservable because of inconsistent semantics

How to efficiently enforce a roundtrip through `observe` has to be
reevaluated later.
---
 src/Quasar/Observable.hs | 28 +---------------------------
 1 file changed, 1 insertion(+), 27 deletions(-)

diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs
index 43be655..79c5fcc 100644
--- a/src/Quasar/Observable.hs
+++ b/src/Quasar/Observable.hs
@@ -96,19 +96,13 @@ class IsRetrievable r a => IsObservable r a | a -> r where
     -> m Disposer
   observe observable = observe (toObservable observable)
 
-  pingObservable
-    :: (MonadQuasar m, MonadIO m)
-    => a -- ^ observable
-    -> m ()
-  pingObservable observable = pingObservable (toObservable observable)
-
   toObservable :: a -> Observable r
   toObservable = Observable
 
   mapObservable :: (r -> r2) -> a -> Observable r2
   mapObservable f = Observable . MappedObservable f . toObservable
 
-  {-# MINIMAL toObservable | observe, pingObservable #-}
+  {-# MINIMAL toObservable | observe #-}
 
 
 observe_
@@ -251,7 +245,6 @@ instance IsObservable a (ConstObservable a) where
   observe (ConstObservable x) callback = liftQuasarSTM do
     callback $ ObservableValue x
     pure trivialDisposer
-  pingObservable _ = pure ()
 
 
 newtype ThrowObservable a = ThrowObservable SomeException
@@ -261,7 +254,6 @@ instance IsObservable a (ThrowObservable a) where
   observe (ThrowObservable ex) callback = liftQuasarSTM do
     callback $ ObservableNotAvailable ex
     pure trivialDisposer
-  pingObservable _ = pure ()
 
 
 data MappedObservable a = forall b. MappedObservable (b -> a) (Observable b)
@@ -269,7 +261,6 @@ instance IsRetrievable a (MappedObservable a) where
   retrieve (MappedObservable f observable) = f <$> retrieve observable
 instance IsObservable a (MappedObservable a) where
   observe (MappedObservable fn observable) callback = observe observable (callback . fmap fn)
-  pingObservable (MappedObservable _ observable) = pingObservable observable
   mapObservable f1 (MappedObservable f2 upstream) = toObservable $ MappedObservable (f1 . f2) upstream
 
 
@@ -297,12 +288,6 @@ instance IsObservable a (LiftA2Observable a) where
     dy <- observe fy (\update -> liftSTM (writeTVar var1 (Just update)) >> callCallback)
     pure $ dx <> dy
 
-  pingObservable (LiftA2Observable _ fx fy) = liftQuasarIO do
-    -- LATER: keep backpressure for parallel network requests
-    future <- async $ pingObservable fy
-    pingObservable fx
-    await future
-
   mapObservable f1 (LiftA2Observable f2 fx fy) = toObservable $ LiftA2Observable (\x y -> f1 (f2 x y)) fx fy
 
 
@@ -342,10 +327,6 @@ instance IsObservable a (BindObservable a) where
             activeKey <- readTVar keyVar
             when (callbackKey == activeKey) (callback rmsg)
 
-  pingObservable (BindObservable fx fn) = do
-    x <- retrieve fx
-    pingObservable (fn x)
-
   mapObservable f (BindObservable fx fn) = toObservable $ BindObservable fx (f <<$>> fn)
 
 
@@ -381,9 +362,6 @@ instance IsObservable a (CatchObservable e a) where
             activeKey <- readTVar keyVar
             when (callbackKey == activeKey) (callback rmsg)
 
-  pingObservable (CatchObservable fx fn) = do
-    pingObservable fx `catch` \ex -> pingObservable (fn ex)
-
 
 newtype ObserverRegistry a = ObserverRegistry (TVar (HM.HashMap Unique (ObservableState a -> STM ())))
 
@@ -419,8 +397,6 @@ instance IsObservable a (ObservableVar a) where
   observe (ObservableVar var registry) callback = liftQuasarSTM do
     registerObserver registry callback . ObservableValue =<< readTVar var
 
-  pingObservable _ = pure ()
-
 newObservableVar :: MonadSTM m => a -> m (ObservableVar a)
 newObservableVar x = liftSTM $ ObservableVar <$> newTVar x <*> newObserverRegistry
 
@@ -462,8 +438,6 @@ instance IsObservable a (ObservablePrim a) where
   observe (ObservablePrim var registry) callback = liftQuasarSTM do
     registerObserver registry callback =<< readTVar var
 
-  pingObservable _ = pure ()
-
 newObservablePrim :: MonadSTM m => ObservableState a -> m (ObservablePrim a)
 newObservablePrim x = liftSTM $ ObservablePrim <$> newTVar x <*> newObserverRegistry
 
-- 
GitLab