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