Skip to content

Commit 467f38f

Browse files
Hiten Tandonlunagl
authored andcommitted
Feat: Added yielder support and marked iterators for deprecation.
gleam/iterator has been marked for deprecation and suggests use of gleam/yielder instead. Hence, this pr adds support for the same.
1 parent 85535b4 commit 467f38f

File tree

5 files changed

+36
-8
lines changed

5 files changed

+36
-8
lines changed

flake.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gleam.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ links = []
88

99
[dependencies]
1010
gleam_stdlib = "~> 0.37"
11+
gleam_yielder = ">= 1.1.0 and < 2.0.0"
1112

1213
[dev-dependencies]
1314
gleeunit = "~> 1.1"

manifest.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
# You typically do not need to edit this file
33

44
packages = [
5-
{ name = "gleam_stdlib", version = "0.37.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "5398BD6C2ABA17338F676F42F404B9B7BABE1C8DC7380031ACB05BBE1BCF3742" },
6-
{ name = "gleeunit", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "72CDC3D3F719478F26C4E2C5FED3E657AC81EC14A47D2D2DEBB8693CA3220C3B" },
5+
{ name = "gleam_stdlib", version = "0.45.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "206FCE1A76974AECFC55AEBCD0217D59EDE4E408C016E2CFCCC8FF51278F186E" },
6+
{ name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" },
7+
{ name = "gleeunit", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "F7A7228925D3EE7D0813C922E062BFD6D7E9310F0BEE585D3A42F3307E3CFD13" },
78
]
89

910
[requirements]
1011
gleam_stdlib = { version = "~> 0.37" }
12+
gleam_yielder = { version = ">= 1.1.0 and < 2.0.0" }
1113
gleeunit = { version = "~> 1.1" }

src/glearray.gleam

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import gleam/iterator.{type Iterator}
2+
import gleam/yielder.{type Yielder}
23

34
/// Arrays are ordered sequences of elements, similar to lists.
45
///
@@ -224,10 +225,19 @@ fn do_insert(array: Array(a), index: Int, value: a) -> Array(a)
224225
/// ["A", "B", "C"]
225226
/// ```
226227
///
228+
@deprecated("Iterators have been deprecated, please use yield instead.")
227229
pub fn iterate(array: Array(a)) -> Iterator(a) {
228230
use index <- iterator.unfold(from: 0)
229231
case get(array, index) {
230232
Ok(element) -> iterator.Next(element, index + 1)
231233
Error(_) -> iterator.Done
232234
}
233235
}
236+
237+
pub fn yield(array: Array(a)) -> Yielder(a) {
238+
use index <- yielder.unfold(from: 0)
239+
case get(array, index) {
240+
Ok(element) -> yielder.Next(element, index + 1)
241+
Error(_) -> yielder.Done
242+
}
243+
}

test/glearray_test.gleam

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import gleam/function
22
import gleam/iterator
33
import gleam/list
44
import gleam/result
5+
import gleam/yielder
56
import glearray.{type Array}
67
import gleeunit
78
import gleeunit/should
@@ -112,6 +113,20 @@ fn iterate(list: List(a)) {
112113
|> should.equal(list)
113114
}
114115

116+
pub fn yield_test() {
117+
yield([])
118+
yield([1, 2, 3, 4])
119+
yield([0.4, 6.1, 99.9, -64.0])
120+
}
121+
122+
fn yield(list: List(a)) {
123+
list
124+
|> glearray.from_list
125+
|> glearray.yield
126+
|> yielder.to_list
127+
|> should.equal(list)
128+
}
129+
115130
fn assert_empty(array: Array(a)) -> Array(a) {
116131
assert_length(array, 0)
117132
should.equal(array, glearray.new())

0 commit comments

Comments
 (0)