From af65ceeae4518b754fb678674c0b3c542acd06ab Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Sun, 24 Apr 2022 17:41:48 +0200
Subject: [PATCH] Move newUnmanaged{IO,STM}Disposer to Disposer module

---
 src/Quasar/Resources.hs          | 16 ----------------
 src/Quasar/Resources/Disposer.hs | 17 +++++++++++++++++
 2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/Quasar/Resources.hs b/src/Quasar/Resources.hs
index 6efc90d..d99d50d 100644
--- a/src/Quasar/Resources.hs
+++ b/src/Quasar/Resources.hs
@@ -43,26 +43,10 @@ module Quasar.Resources (
 
 import Control.Monad.Catch
 import Quasar.Future
-import Quasar.Async.Fork
-import Quasar.Async.STMHelper
 import Quasar.Exceptions
 import Quasar.MonadQuasar
 import Quasar.Prelude
 import Quasar.Resources.Disposer
-import Quasar.Utils.ShortIO
-
-
-newUnmanagedIODisposer :: IO () -> TIOWorker -> ExceptionSink -> STM Disposer
--- TODO change TIOWorker behavior for spawning threads, so no `unsafeShortIO` is necessary
-newUnmanagedIODisposer fn worker exChan = newUnmanagedPrimitiveDisposer (unsafeShortIO $ forkFuture fn exChan) worker exChan
-
-newUnmanagedSTMDisposer :: STM () -> TIOWorker -> ExceptionSink -> STM Disposer
-newUnmanagedSTMDisposer fn worker exChan = newUnmanagedPrimitiveDisposer disposeFn worker exChan
-  where
-    disposeFn :: ShortIO (Future ())
-    disposeFn = unsafeShortIO $ atomically $
-      -- Spawn a thread only if the transaction retries
-      (pure <$> fn) `orElse` forkAsyncSTM (atomically fn) worker exChan
 
 
 registerResource :: (Resource a, MonadQuasar m, MonadSTM m) => a -> m ()
diff --git a/src/Quasar/Resources/Disposer.hs b/src/Quasar/Resources/Disposer.hs
index 56f8ba5..a29ae24 100644
--- a/src/Quasar/Resources/Disposer.hs
+++ b/src/Quasar/Resources/Disposer.hs
@@ -7,6 +7,8 @@ module Quasar.Resources.Disposer (
   disposeEventuallySTM,
   disposeEventuallySTM_,
   newUnmanagedPrimitiveDisposer,
+  newUnmanagedIODisposer,
+  newUnmanagedSTMDisposer,
   trivialDisposer,
 
   -- * Resource manager
@@ -23,6 +25,7 @@ import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HM
 import Data.HashSet (HashSet)
 import Data.HashSet qualified as HashSet
+import Quasar.Async.Fork
 import Quasar.Async.STMHelper
 import Quasar.Future
 import Quasar.Exceptions
@@ -78,6 +81,20 @@ newUnmanagedPrimitiveDisposer fn worker exChan = toDisposer <$> do
   key <- newUniqueSTM
   FnDisposer key worker exChan <$> newTOnce fn <*> newFinalizers
 
+newUnmanagedIODisposer :: IO () -> TIOWorker -> ExceptionSink -> STM Disposer
+-- TODO change TIOWorker behavior for spawning threads, so no `unsafeShortIO` is necessary
+newUnmanagedIODisposer fn worker exChan = newUnmanagedPrimitiveDisposer (unsafeShortIO $ forkFuture fn exChan) worker exChan
+
+newUnmanagedSTMDisposer :: STM () -> TIOWorker -> ExceptionSink -> STM Disposer
+newUnmanagedSTMDisposer fn worker exChan = newUnmanagedPrimitiveDisposer disposeFn worker exChan
+  where
+    disposeFn :: ShortIO (Future ())
+    disposeFn = unsafeShortIO $ atomically $
+      -- Spawn a thread only if the transaction retries
+      (pure <$> fn) `orElse` forkAsyncSTM (atomically fn) worker exChan
+
+
+
 
 dispose :: (MonadIO m, Resource r) => r -> m ()
 dispose resource = liftIO $ await =<< atomically (disposeEventuallySTM resource)
-- 
GitLab