aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/gleam/iterator.gleam4
-rw-r--r--test/gleam/iterator_test.gleam13
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])
+}