Skip to content
Snippets Groups Projects
Commit 796be3c1 authored by Jens Nolte's avatar Jens Nolte
Browse files

Add MonadObserve constraint alias


Co-authored-by: default avatarJan Beinke <git@janbeinke.com>
parent 70c96bb6
No related branches found
No related tags found
No related merge requests found
Pipeline #2411 passed
...@@ -4,6 +4,7 @@ module Quasar.Observable ( ...@@ -4,6 +4,7 @@ module Quasar.Observable (
-- * Observable core types -- * Observable core types
IsRetrievable(..), IsRetrievable(..),
retrieveIO, retrieveIO,
MonadObserve,
IsObservable(..), IsObservable(..),
Observable(..), Observable(..),
ObservableMessage(..), ObservableMessage(..),
...@@ -72,9 +73,11 @@ class IsRetrievable v a | a -> v where ...@@ -72,9 +73,11 @@ class IsRetrievable v a | a -> v where
retrieveIO :: IsRetrievable v a => a -> IO v retrieveIO :: IsRetrievable v a => a -> IO v
retrieveIO x = withOnResourceManager $ await =<< retrieve x retrieveIO x = withOnResourceManager $ await =<< retrieve x
type MonadObserve m = (MonadAwait m, MonadResourceManager m)
{-# DEPRECATED unsafeAsyncObserveIO "Old implementation of `observe`." #-} {-# DEPRECATED unsafeAsyncObserveIO "Old implementation of `observe`." #-}
class IsRetrievable v o => IsObservable v o | o -> v where 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 observe observable callback = do
msgVar <- liftIO $ newTVarIO ObservableLoading msgVar <- liftIO $ newTVarIO ObservableLoading
idVar <- liftIO $ newTVarIO (0 :: Word64) idVar <- liftIO $ newTVarIO (0 :: Word64)
...@@ -124,7 +127,7 @@ data ObserveWhileCompleted = ObserveWhileCompleted ...@@ -124,7 +127,7 @@ data ObserveWhileCompleted = ObserveWhileCompleted
instance Exception ObserveWhileCompleted instance Exception ObserveWhileCompleted
-- | Observe until the callback returns `Just`. -- | 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 observeWhile observable callback = do
resultVar <- liftIO $ newIORef impossibleCodePath resultVar <- liftIO $ newIORef impossibleCodePath
observeWhile_ observable \msg -> do observeWhile_ observable \msg -> do
...@@ -138,7 +141,7 @@ observeWhile observable callback = do ...@@ -138,7 +141,7 @@ observeWhile observable callback = do
-- | Observe until the callback returns `False`. -- | 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 = observeWhile_ observable callback =
catch catch
do do
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment