aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2019-12-12 10:47:23 +0000
committerLouis Pilfold <louis@lpil.uk>2020-05-26 19:19:29 +0100
commit20904ceb0f19d4d3fb6d8cf9a5a324c0938dc3fb (patch)
tree105d806c05b81a8eaa5d91574ab4a620178e68aa /src
parentae5730686b046cba6365989fc0f88b3b2644beee (diff)
downloadgleam_stdlib-20904ceb0f19d4d3fb6d8cf9a5a324c0938dc3fb.tar.gz
gleam_stdlib-20904ceb0f19d4d3fb6d8cf9a5a324c0938dc3fb.zip
cycle
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
+}