Skip to content
Snippets Groups Projects
Commit 123555ea authored by Jens Nolte's avatar Jens Nolte
Browse files

Add monadic resource registration functions

parent 887868b6
No related branches found
No related tags found
No related merge requests found
......@@ -6,8 +6,15 @@ module Quasar.Resources (
disposeEventuallySTM_,
isDisposed,
-- * Monadic resource management
registerResource,
registerDisposeAction,
registerDisposeTransaction,
-- * Disposer
Disposer,
newIODisposer,
newSTMDisposer,
-- * Resource manager
ResourceManager,
......@@ -19,8 +26,33 @@ module Quasar.Resources (
import Control.Concurrent.STM
import Quasar.Async.STMHelper
import Quasar.Exceptions
import Quasar.Monad
import Quasar.Prelude
import Quasar.Resources.Disposer
newIODisposer :: TIOWorker -> ExceptionChannel -> IO () -> STM Disposer
newIODisposer = undefined
newSTMDisposer :: TIOWorker -> ExceptionChannel -> STM () -> STM Disposer
newSTMDisposer = undefined
registerResource :: (Resource a, MonadQuasar m) => a -> m ()
registerResource resource = do
rm <- askResourceManager
runSTM $ attachResource rm resource
registerDisposeAction :: MonadQuasar m => IO () -> m ()
registerDisposeAction fn = do
worker <- askIOWorker
exChan <- askExceptionChannel
rm <- askResourceManager
runSTM $ attachResource rm =<< newIODisposer worker exChan fn
registerDisposeTransaction :: MonadQuasar m => STM () -> m ()
registerDisposeTransaction fn = do
worker <- askIOWorker
exChan <- askExceptionChannel
rm <- askResourceManager
runSTM $ attachResource rm =<< newSTMDisposer worker exChan fn
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment