From 796be3c170c379ae366b725807093a1ecb8c81aa Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Sun, 29 Aug 2021 22:27:16 +0200 Subject: [PATCH] Add MonadObserve constraint alias Co-authored-by: Jan Beinke <git@janbeinke.com> --- src/Quasar/Observable.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs index 941f45b..5efc542 100644 --- a/src/Quasar/Observable.hs +++ b/src/Quasar/Observable.hs @@ -4,6 +4,7 @@ module Quasar.Observable ( -- * Observable core types IsRetrievable(..), retrieveIO, + MonadObserve, IsObservable(..), Observable(..), ObservableMessage(..), @@ -72,9 +73,11 @@ class IsRetrievable v a | a -> v where retrieveIO :: IsRetrievable v a => a -> IO v retrieveIO x = withOnResourceManager $ await =<< retrieve x +type MonadObserve m = (MonadAwait m, MonadResourceManager m) + {-# DEPRECATED unsafeAsyncObserveIO "Old implementation of `observe`." #-} class IsRetrievable v o => IsObservable v o | o -> v where - observe :: (MonadAwait m, MonadCatch m, MonadResourceManager m) => o -> (ObservableMessage v -> m ()) -> m a + observe :: MonadObserve m => o -> (ObservableMessage v -> m ()) -> m a observe observable callback = do msgVar <- liftIO $ newTVarIO ObservableLoading idVar <- liftIO $ newTVarIO (0 :: Word64) @@ -124,7 +127,7 @@ data ObserveWhileCompleted = ObserveWhileCompleted instance Exception ObserveWhileCompleted -- | Observe until the callback returns `Just`. -observeWhile :: (IsObservable v o, MonadAwait m, MonadResourceManager m) => o -> (ObservableMessage v -> m (Maybe a)) -> m a +observeWhile :: (IsObservable v o, MonadObserve m) => o -> (ObservableMessage v -> m (Maybe a)) -> m a observeWhile observable callback = do resultVar <- liftIO $ newIORef impossibleCodePath observeWhile_ observable \msg -> do @@ -138,7 +141,7 @@ observeWhile observable callback = do -- | Observe until the callback returns `False`. -observeWhile_ :: (IsObservable v o, MonadAwait m, MonadResourceManager m) => o -> (ObservableMessage v -> m Bool) -> m () +observeWhile_ :: (IsObservable v o, MonadObserve m) => o -> (ObservableMessage v -> m Bool) -> m () observeWhile_ observable callback = catch do -- GitLab