From d2b01222bff07998f50494b1da2f37dd9ae49dab Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Sun, 5 Sep 2021 04:00:56 +0200
Subject: [PATCH] Generalize localResourceManager

Co-authored-by: Jan Beinke <git@janbeinke.com>
---
 src/Quasar/Disposable.hs | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/Quasar/Disposable.hs b/src/Quasar/Disposable.hs
index 429c9ad..63fb487 100644
--- a/src/Quasar/Disposable.hs
+++ b/src/Quasar/Disposable.hs
@@ -245,7 +245,7 @@ class (MonadAwait m, MonadMask m, MonadIO m) => MonadResourceManager m where
   askResourceManager :: m ResourceManager
 
   -- | Replace the resource manager for a computation.
-  localResourceManager :: ResourceManager -> m a -> m a
+  localResourceManager :: IsResourceManager a => a -> m r -> m r
 
 
 registerDisposable :: (IsDisposable a, MonadResourceManager m) => a -> m ()
@@ -264,7 +264,7 @@ withSubResourceManagerM action =
 
 
 instance (MonadAwait m, MonadMask m, MonadIO m) => MonadResourceManager (ReaderT ResourceManager m) where
-  localResourceManager resourceManager = local (const resourceManager)
+  localResourceManager resourceManager = local (const (toResourceManager resourceManager))
 
   askResourceManager = ask
 
@@ -277,6 +277,9 @@ instance {-# OVERLAPPABLE #-} MonadResourceManager m => MonadResourceManager (Re
     lift $ localResourceManager resourceManager $ runReaderT action x
 
 
+-- TODO MonadResourceManager instances for StateT, WriterT, RWST, MaybeT, ...
+
+
 onResourceManager :: (IsResourceManager a) => a -> ReaderT ResourceManager m r -> m r
 onResourceManager target action = runReaderT action (toResourceManager target)
 
-- 
GitLab