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

Add captureDisposable

parent de4ba37d
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,8 @@ module Quasar.Disposable (
disposeEventually,
withOnResourceManager,
onResourceManager,
captureDisposable,
captureDisposable_,
-- ** ResourceManager
IsResourceManager(..),
......@@ -266,6 +268,21 @@ onResourceManager :: (IsResourceManager a) => a -> ReaderT ResourceManager m r -
onResourceManager target action = runReaderT action (toResourceManager target)
captureDisposable :: MonadResourceManager m => m (Awaitable a) -> m (Task a)
captureDisposable action = do
-- TODO improve performance by only creating a new resource manager when two or more disposables are attached
resourceManager <- newResourceManager
awaitable <- localResourceManager resourceManager $ action
pure $ Task (toDisposable resourceManager) awaitable
captureDisposable_ :: MonadResourceManager m => m () -> m Disposable
captureDisposable_ action = do
-- TODO improve performance by only creating a new resource manager when two or more disposables are attached
resourceManager <- newResourceManager
localResourceManager resourceManager action
pure $ toDisposable resourceManager
data ResourceManager = ResourceManager {
disposingVar :: TVar Bool,
......
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