From 40497aa414b35177770f331153095648f1973fbe Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Tue, 2 Nov 2021 23:16:46 +0100 Subject: [PATCH] Add disposeOnError Co-authored-by: Jan Beinke <git@janbeinke.com> --- src/Quasar/ResourceManager.hs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Quasar/ResourceManager.hs b/src/Quasar/ResourceManager.hs index 6f22bb7..940cd52 100644 --- a/src/Quasar/ResourceManager.hs +++ b/src/Quasar/ResourceManager.hs @@ -14,6 +14,7 @@ module Quasar.ResourceManager ( onResourceManager, captureDisposable, captureDisposable_, + disposeOnError, liftResourceManagerIO, handleByResourceManager, @@ -193,6 +194,14 @@ captureDisposable action = do captureDisposable_ :: MonadResourceManager m => m () -> m Disposable captureDisposable_ = snd <<$>> captureDisposable +-- | Disposes all resources created by the computation if the computation throws an exception. +disposeOnError :: MonadResourceManager m => m a -> m a +disposeOnError action = do + bracketOnError + newResourceManager + dispose + \resourceManager -> localResourceManager resourceManager action + -- | Run a computation and throw any exception that occurs to the resource manager. -- -- This can be used to run e.g. callbacks that belong to a different resource context. -- GitLab