From d5940a4169cb234a3a1909ba17970ef8b3969fcf Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Wed, 25 Aug 2021 00:43:05 +0200 Subject: [PATCH] Add alreadyDisposing --- src/Quasar/Disposable.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Quasar/Disposable.hs b/src/Quasar/Disposable.hs index 250abb5..b415640 100644 --- a/src/Quasar/Disposable.hs +++ b/src/Quasar/Disposable.hs @@ -6,6 +6,7 @@ module Quasar.Disposable ( newDisposable, synchronousDisposable, noDisposable, + alreadyDisposing, -- ** ResourceManager ResourceManager, @@ -129,6 +130,19 @@ noDisposable = mempty data ResourceManager = ResourceManager +newtype AlreadyDisposing = AlreadyDisposing (Awaitable ()) + +instance IsDisposable AlreadyDisposing where + dispose x = pure (isDisposed x) + isDisposed (AlreadyDisposing awaitable) = awaitable + +-- | Create a `Disposable` from an `IsAwaitable`. +-- +-- The disposable is considered to be already disposing (so `dispose` will be a no-op) and is considered disposed once +-- the awaitable is completed. +alreadyDisposing :: IsAwaitable () a => a -> Disposable +alreadyDisposing someAwaitable = toDisposable $ AlreadyDisposing $ toAwaitable someAwaitable + class HasResourceManager a where getResourceManager :: a -> ResourceManager -- GitLab