diff options
-rw-r--r-- | src/gleam/iterator.gleam | 34 | ||||
-rw-r--r-- | test/gleam/iterator_test.gleam | 18 |
2 files changed, 52 insertions, 0 deletions
diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam index 0b747df..c09901c 100644 --- a/src/gleam/iterator.gleam +++ b/src/gleam/iterator.gleam @@ -965,3 +965,37 @@ pub fn last(iterator: Iterator(element)) -> Result(element, Nil) { iterator |> reduce(fn(elem, _) { elem }) } + +/// Creates an iterator that yields no elements. +/// +/// ## Examples +/// +/// > empty() |> to_list +/// [] +/// +pub fn empty() -> Iterator(element) { + Iterator(stop) +} + +/// Creates an iterator that yields exactly one element provided by calling the given function. +/// +/// ## Examples +/// +/// > once(fn() { 1 }) |> to_list +/// [1] +/// +pub fn once(f: fn() -> element) -> Iterator(element) { + fn() { Continue(f(), stop) } + |> Iterator +} + +/// Creates an iterator that yields the given element exactly once. +/// +/// ## Examples +/// +/// > single(1) |> to_list +/// [1] +/// +pub fn single(elem: element) -> Iterator(element) { + once(fn() { elem }) +} diff --git a/test/gleam/iterator_test.gleam b/test/gleam/iterator_test.gleam index 84459a2..53da3db 100644 --- a/test/gleam/iterator_test.gleam +++ b/test/gleam/iterator_test.gleam @@ -393,3 +393,21 @@ pub fn last_test() { |> iterator.last |> should.equal(Ok(9)) } + +pub fn empty_test() { + iterator.empty() + |> iterator.to_list + |> should.equal([]) +} + +pub fn once_test() { + iterator.once(fn() { 1 }) + |> iterator.to_list + |> should.equal([1]) +} + +pub fn single_test() { + iterator.single(1) + |> iterator.to_list + |> should.equal([1]) +} |