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