aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2019-12-12 12:28:53 +0000
committerLouis Pilfold <louis@lpil.uk>2020-05-26 19:19:29 +0100
commit6f119464b4cfd09a3555120e3f9370d504fb7ea0 (patch)
tree89008a958a8c5722fa883215bf501891f4000738 /src
parent3bbd4a1bf2d66d75a5547dcc15049174857850f6 (diff)
downloadgleam_stdlib-6f119464b4cfd09a3555120e3f9370d504fb7ea0.tar.gz
gleam_stdlib-6f119464b4cfd09a3555120e3f9370d504fb7ea0.zip
range
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 33ff8d0..690d66e 100644
--- a/src/gleam/iterator.gleam
+++ b/src/gleam/iterator.gleam
@@ -176,3 +176,20 @@ pub fn cycle(iterator: Iterator(a)) -> Iterator(a) {
|> do_cycle(_, iterator)
|> opaque
}
+
+fn do_range(current, limit, inc) -> fn() -> Action(Int) {
+ case current == limit {
+ True -> fn() { Stop }
+ False -> fn() { Continue(current, do_range(current + inc, limit, inc)) }
+ }
+}
+
+// TODO: document
+pub fn range(from start, to stop) -> Iterator(Int) {
+ case start < stop {
+ True -> 1
+ False -> -1
+ }
+ |> do_range(start, stop, _)
+ |> opaque
+}