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