From ca5e548e7c0eb51c3ef8ac8299396afc346bd4f6 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Wed, 1 Sep 2021 00:14:55 +0200 Subject: [PATCH] Add captureDisposable --- src/Quasar/Disposable.hs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Quasar/Disposable.hs b/src/Quasar/Disposable.hs index 9cb1777..a8b0e41 100644 --- a/src/Quasar/Disposable.hs +++ b/src/Quasar/Disposable.hs @@ -13,6 +13,8 @@ module Quasar.Disposable ( disposeEventually, withOnResourceManager, onResourceManager, + captureDisposable, + captureDisposable_, -- ** ResourceManager IsResourceManager(..), @@ -266,6 +268,21 @@ onResourceManager :: (IsResourceManager a) => a -> ReaderT ResourceManager m r - onResourceManager target action = runReaderT action (toResourceManager target) +captureDisposable :: MonadResourceManager m => m (Awaitable a) -> m (Task a) +captureDisposable action = do + -- TODO improve performance by only creating a new resource manager when two or more disposables are attached + resourceManager <- newResourceManager + awaitable <- localResourceManager resourceManager $ action + pure $ Task (toDisposable resourceManager) awaitable + +captureDisposable_ :: MonadResourceManager m => m () -> m Disposable +captureDisposable_ action = do + -- TODO improve performance by only creating a new resource manager when two or more disposables are attached + resourceManager <- newResourceManager + localResourceManager resourceManager action + pure $ toDisposable resourceManager + + data ResourceManager = ResourceManager { disposingVar :: TVar Bool, -- GitLab