aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gleam/iterator.gleam17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam
index a2ca7d8..a4c9361 100644
--- a/src/gleam/iterator.gleam
+++ b/src/gleam/iterator.gleam
@@ -160,3 +160,20 @@ pub fn filter(iterator: Iterator(a), for predicate: fn(a) -> Bool) -> Iterator(a
|> do_filter(_, predicate)
|> opaque
}
+
+fn do_cycle(next: fn() -> Action(a), reset: fn() -> Action(a)) {
+ fn() {
+ case next() {
+ Continue(e, iterator) -> Continue(e, do_cycle(iterator, reset))
+ Stop -> do_cycle(reset, reset)()
+ }
+ }
+}
+
+// TODO: document
+pub fn cycle(iterator: Iterator(a)) -> Iterator(a) {
+ let iterator = iterator |> unopaque
+ iterator
+ |> do_cycle(_, iterator)
+ |> opaque
+}