diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs index aeda1d4dc597a4db111e28a8bfc5e952af70ddac..7b9c6369c1439f8bd18f6bc5b602e75f66ed86b4 100644 --- a/src/Quasar/Observable.hs +++ b/src/Quasar/Observable.hs @@ -8,6 +8,7 @@ module Quasar.Observable ( IsObservable(..), Observable(..), ObservableMessage(..), + toObservableUpdate, asyncObserve, asyncObserve_, @@ -68,6 +69,12 @@ instance Applicative ObservableMessage where liftA2 fn (ObservableUpdate x) (ObservableUpdate y) = ObservableUpdate (fn x y) +toObservableUpdate :: MonadThrow m => ObservableMessage a -> m (Maybe a) +toObservableUpdate (ObservableUpdate value) = pure $ Just value +toObservableUpdate ObservableLoading = pure Nothing +toObservableUpdate (ObservableNotAvailable ex) = throwM ex + + class IsRetrievable v a | a -> v where retrieve :: MonadAsync m => a -> m (Task v)