From 20904ceb0f19d4d3fb6d8cf9a5a324c0938dc3fb Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Thu, 12 Dec 2019 10:47:23 +0000 Subject: cycle --- src/gleam/iterator.gleam | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src') 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 +} -- cgit v1.2.3