diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,14 @@
+## 0.0.6.0
+
+* Add `withYieldToList`
+
 ## 0.0.5.0
 
 * Fix roles on `Eff` (thanks to @Lysxia)
 
 * Add `bracket` (thanks to @Lysxia)
+
+* Document `Jump`
 
 ## 0.0.4.2
 
diff --git a/bluefin-internal.cabal b/bluefin-internal.cabal
--- a/bluefin-internal.cabal
+++ b/bluefin-internal.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               bluefin-internal
-version:            0.0.5.0
+version:            0.0.6.0
 license:            MIT
 license-file:       LICENSE
 author:             Tom Ellis
diff --git a/src/Bluefin/Internal.hs b/src/Bluefin/Internal.hs
--- a/src/Bluefin/Internal.hs
+++ b/src/Bluefin/Internal.hs
@@ -777,6 +777,24 @@
   (as, r) <- yieldToReverseList f
   pure (reverse as, r)
 
+-- |
+-- @
+-- >>> runPureEff $ withYieldToList $ \y -> do
+--   yield y 1
+--   yield y 2
+--   yield y 100
+--   pure length
+-- 3
+-- @
+withYieldToList ::
+  -- | Stream computation
+  (forall e. Stream a e -> Eff (e :& es) ([a] -> r)) ->
+  -- | Result
+  Eff es r
+withYieldToList f = do
+  (l, g) <- yieldToList f
+  pure (g l)
+
 -- | This is more efficient than 'yieldToList' because it gathers the
 -- elements into a stack in reverse order. @yieldToList@ then reverses
 -- that stack.
diff --git a/src/Bluefin/Internal/Examples.hs b/src/Bluefin/Internal/Examples.hs
--- a/src/Bluefin/Internal/Examples.hs
+++ b/src/Bluefin/Internal/Examples.hs
@@ -61,6 +61,13 @@
   yield y 2
   yield y 100
 
+withYieldToListExample :: Int
+withYieldToListExample = runPureEff $ withYieldToList $ \y -> do
+  yield y 1
+  yield y 2
+  yield y 100
+  pure length
+
 forEachExample :: ([Int], ())
 forEachExample = runPureEff $ yieldToList $ \y -> do
   forEach (inFoldable [0 .. 4]) $ \i -> do
