aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcin Puc <marcin.e.puc@gmail.com>2021-03-08 17:07:03 +0100
committerLouis Pilfold <louis@lpil.uk>2021-03-08 22:48:07 +0000
commitd86237c4c07426d5f5df8fefd8f3e046b35ef4a4 (patch)
tree5b6b1ba418cfab3cde6db289b4e000a04d1696ee /src
parentd19e8b4bcfd77e384e1b2e57bc342e81c1275287 (diff)
downloadgleam_stdlib-d86237c4c07426d5f5df8fefd8f3e046b35ef4a4.tar.gz
gleam_stdlib-d86237c4c07426d5f5df8fefd8f3e046b35ef4a4.zip
Add iterator.iterate
Diffstat (limited to 'src')
-rw-r--r--src/gleam/iterator.gleam14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam
index 9bbf9d0..f441859 100644
--- a/src/gleam/iterator.gleam
+++ b/src/gleam/iterator.gleam
@@ -494,3 +494,17 @@ pub fn find(
Stop -> Error(Nil)
}
}
+
+/// Creates an iterator that inifinitely applies a function to a value.
+///
+/// ## Examples
+///
+/// > iterate(1, fn(n) { n * 3 }) |> take(5)
+/// [1, 3, 9, 27, 81]
+///
+pub fn iterate(
+ from initial: element,
+ with f: fn(element) -> element,
+) -> Iterator(element) {
+ unfold(initial, fn(element) { Next(element, f(element)) })
+}