From decb1e80a3e6f1b26fcd676f29a3d6ff02bab7f9 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Tue, 30 Nov 2021 22:17:42 +0100
Subject: [PATCH] Add newUniqueSTM to prelude

---
 src/Quasar/PreludeExtras.hs   | 6 ++++++
 src/Quasar/ResourceManager.hs | 5 ++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/Quasar/PreludeExtras.hs b/src/Quasar/PreludeExtras.hs
index b91d717..c229dd6 100644
--- a/src/Quasar/PreludeExtras.hs
+++ b/src/Quasar/PreludeExtras.hs
@@ -8,6 +8,7 @@ import Prelude
 
 import Control.Applicative (liftA2)
 import Control.Concurrent (threadDelay)
+import Control.Concurrent.STM
 import Control.Monad.Catch (MonadThrow, throwM)
 import Control.Monad.State.Lazy as State
 import Data.Char qualified as Char
@@ -16,6 +17,8 @@ import Data.HashSet qualified as HS
 import Data.Hashable qualified as Hashable
 import Data.List qualified as List
 import Data.Maybe qualified as Maybe
+import Data.Unique (Unique, newUnique)
+import GHC.Conc (unsafeIOToSTM)
 import GHC.Stack.Types qualified
 import Quasar.Utils.ExtraT
 
@@ -129,3 +132,6 @@ unlessM :: Monad m => m Bool -> m () -> m ()
 unlessM condM acc = do
   cond <- condM
   unless cond acc
+
+newUniqueSTM :: STM Unique
+newUniqueSTM = unsafeIOToSTM newUnique
diff --git a/src/Quasar/ResourceManager.hs b/src/Quasar/ResourceManager.hs
index 4445a8d..e04d66f 100644
--- a/src/Quasar/ResourceManager.hs
+++ b/src/Quasar/ResourceManager.hs
@@ -49,7 +49,6 @@ import Data.HashMap.Strict qualified as HM
 import Data.List.NonEmpty (NonEmpty(..), (<|), nonEmpty)
 import Data.Sequence (Seq(..), (|>))
 import Data.Sequence qualified as Seq
-import GHC.Conc (unsafeIOToSTM)
 import Quasar.Async.Unmanaged
 import Quasar.Awaitable
 import Quasar.Disposable
@@ -330,7 +329,7 @@ instance IsResourceManager DefaultResourceManager where
   attachDisposable self disposable = liftIO $ atomically $ attachDisposableSTM self disposable
 
   attachDisposableSTM DefaultResourceManager{stateVar, disposablesVar} disposable = do
-    key <- unsafeIOToSTM newUnique
+    key <- newUniqueSTM
     state <- readTVar stateVar
     case state of
       ResourceManagerNormal -> do
@@ -462,7 +461,7 @@ defaultResourceManagerDisposeResult DefaultResourceManager{resourceManagerKey, r
 -- to implement the root resource manager.
 newUnmanagedDefaultResourceManagerInternal :: ResourceManager -> STM DefaultResourceManager
 newUnmanagedDefaultResourceManagerInternal parentResourceManager = do
-  resourceManagerKey <- unsafeIOToSTM newUnique
+  resourceManagerKey <- newUniqueSTM
   stateVar <- newTVar ResourceManagerNormal
   disposablesVar <- newTMVar HM.empty
   lockVar <- newTVar 0
-- 
GitLab