diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | src/gleam/iterator.gleam | 4 | ||||
-rw-r--r-- | test/gleam/iterator_test.gleam | 13 |
3 files changed, 18 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 90d4904..51c9715 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ `string.inspect`. - Fixed a bug where `string.inspect` would show atoms as Gleam custom types even when the format is invalid. +- The `iterator` module gains the `yield` function. ## v0.30.0 - 2023-07-16 diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam index 4e5a752..6a16ad8 100644 --- a/src/gleam/iterator.gleam +++ b/src/gleam/iterator.gleam @@ -1440,3 +1440,7 @@ pub fn each(over iterator: Iterator(a), with f: fn(a) -> b) -> Nil { |> map(f) |> run } + +pub fn yield(element: a, next: fn() -> Iterator(a)) -> Iterator(a) { + Iterator(fn() { Continue(element, next().continuation) }) +} diff --git a/test/gleam/iterator_test.gleam b/test/gleam/iterator_test.gleam index bb9a825..85f8722 100644 --- a/test/gleam/iterator_test.gleam +++ b/test/gleam/iterator_test.gleam @@ -590,3 +590,16 @@ pub fn each_test() { it |> should.equal(1) } + +pub fn yield_test() { + let items = { + use <- iterator.yield(1) + use <- iterator.yield(2) + use <- iterator.yield(3) + iterator.empty() + } + + items + |> iterator.to_list + |> should.equal([1, 2, 3]) +} |