Skip to content

Commit 9eee271

Browse files
mpatajaclpil
authored andcommitted
The set module gains the each function
1 parent 7a710f3 commit 9eee271

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- The `list.concat` function has been deprecated in favour of `list.flatten`.
1010
- The handling of float exponentials and signs in the `float.to_string` and
1111
`string.inspect` functions have been improved on JavaScript.
12+
- The `set` module gains the `each` function.
1213

1314
## v0.40.0 - 2024-08-19
1415

src/gleam/set.gleam

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,3 +380,30 @@ pub fn symmetric_difference(
380380
minus: intersection(of: first, and: second),
381381
)
382382
}
383+
384+
/// Calls a function for each member in a set, discarding the return
385+
/// value.
386+
///
387+
/// Useful for producing a side effect for every item of a set.
388+
///
389+
/// ```gleam
390+
/// import gleam/io
391+
///
392+
/// let set = from_list(["apple", "banana", "cherry"])
393+
///
394+
/// each(set, io.println)
395+
/// // -> Nil
396+
/// // apple
397+
/// // banana
398+
/// // cherry
399+
/// ```
400+
///
401+
/// The order of elements in the iteration is an implementation detail that
402+
/// should not be relied upon.
403+
///
404+
pub fn each(set: Set(member), fun: fn(member) -> a) -> Nil {
405+
fold(set, Nil, fn(nil, member) {
406+
fun(member)
407+
nil
408+
})
409+
}

test/gleam/set_test.gleam

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,15 @@ pub fn symmetric_difference_test() {
158158
set.symmetric_difference(set.from_list([1, 2, 3]), set.from_list([3, 4]))
159159
|> should.equal(set.from_list([1, 2, 4]))
160160
}
161+
162+
pub fn each_test() {
163+
[1, 2, 3]
164+
|> set.from_list
165+
|> set.each(fn(member) {
166+
let assert True = case member {
167+
1 | 2 | 3 -> True
168+
_ -> False
169+
}
170+
})
171+
|> should.equal(Nil)
172+
}

0 commit comments

Comments
 (0)