diff options
author | Louis Pilfold <louis@lpil.uk> | 2023-07-18 19:28:43 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-07-27 15:25:29 +0100 |
commit | 725edc71cd5f2e2162911faeaaa825a4776885b2 (patch) | |
tree | a92dd21f99073d71fd10eb693e2d9993de14f610 | |
parent | 2c14ed13941534f3769f3fe43549d4482044e95b (diff) | |
download | gleam_stdlib-725edc71cd5f2e2162911faeaaa825a4776885b2.tar.gz gleam_stdlib-725edc71cd5f2e2162911faeaaa825a4776885b2.zip |
iterator.yield
-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]) +} |