From 4dfb85627b75a2bd51b9fc838617125458430a3e Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Wed, 11 Aug 2021 03:00:53 +0200 Subject: [PATCH] Update and rename observeFixed --- src/Quasar/Observable.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs index 549b838..a529e8a 100644 --- a/src/Quasar/Observable.hs +++ b/src/Quasar/Observable.hs @@ -40,6 +40,7 @@ import Quasar.Awaitable import Quasar.Core import Quasar.Disposable import Quasar.Prelude +import System.IO (fixIO) data ObservableMessage a @@ -81,10 +82,11 @@ class IsRetrievable v o => IsObservable v o | o -> v where mapObservable :: (v -> a) -> o -> Observable a mapObservable f = Observable . MappedObservable f --- TODO needs a name -- | A variant of `observe` that passes the `Disposable` to the callback. -observeWithDisposablePassedToTheCallback :: IsObservable v o => o -> (Disposable -> ObservableMessage v -> IO ()) -> IO Disposable -observeWithDisposablePassedToTheCallback observable callback = mfix $ \disposable -> observe observable (callback disposable) +-- +-- The disposable passed to the callback must not be used before `observeFixed` returns (otherwise an exception is thrown). +observeFixed :: IsObservable v o => o -> (Disposable -> ObservableMessage v -> IO ()) -> IO Disposable +observeFixed observable callback = fixIO $ \disposable -> observe observable (callback disposable) type ObservableCallback v = ObservableMessage v -> IO () -- GitLab