diff --git a/src/Quasar/Resources.hs b/src/Quasar/Resources.hs
index 32c1ef1c90d165162e198afd7b84f3ba89221df9..f6d777dfb7971739704066bf26951e87a37c5478 100644
--- a/src/Quasar/Resources.hs
+++ b/src/Quasar/Resources.hs
@@ -12,6 +12,8 @@ module Quasar.Resources (
   registerDisposeTransaction,
   disposeEventually,
   disposeEventually_,
+  captureResources,
+  captureResources_,
 
   -- * STM
   disposeEventuallySTM,
@@ -96,3 +98,14 @@ disposeEventually res = ensureSTM $ disposeEventuallySTM res
 
 disposeEventually_ :: (Resource r, MonadQuasar m) => r -> m ()
 disposeEventually_ res = ensureSTM $ disposeEventuallySTM_ res
+
+
+captureResources :: MonadQuasar m => m a -> m (a, Disposer)
+captureResources fn = do
+  quasar <- newQuasar
+  localQuasar quasar do
+    result <- fn
+    pure (result, getDisposer (quasarResourceManager quasar))
+
+captureResources_ :: MonadQuasar m => m () -> m Disposer
+captureResources_ fn = snd <$> captureResources fn