diff options
author | Sebastian Porto <s@porto5.com> | 2021-05-08 06:28:31 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-07 20:28:31 +0000 |
commit | 32b56eb7cd04bdd47a548b021602a018bdf782c6 (patch) | |
tree | dd55c7e7371e2938bec5eb4c613f04585122ffb1 | |
parent | 7b10d02d88af84560855337e45c755686a396943 (diff) | |
download | gleam_stdlib-32b56eb7cd04bdd47a548b021602a018bdf782c6.tar.gz gleam_stdlib-32b56eb7cd04bdd47a548b021602a018bdf782c6.zip |
Add list.flat_map (#202)
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | src/gleam/list.gleam | 14 | ||||
-rw-r--r-- | test/gleam/list_test.gleam | 5 |
3 files changed, 20 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f27a2eb..5c26e43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- The `list` module gains the `flat_map` function. - The `option` module gains the `values` function. - The `result` module gains the `values` function. - All modules now use the new `#(a, b, ...)` tuple syntax. diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam index ea67ba5..a0b3b16 100644 --- a/src/gleam/list.gleam +++ b/src/gleam/list.gleam @@ -452,6 +452,20 @@ pub fn flatten(lists: List(List(a))) -> List(a) { do_flatten(lists, []) } +/// Map and flatten the result +/// +/// ## Examples +/// +/// ``` +/// > flat_map([2, 4, 6], fn(x) { [x, x + 1] }) +/// [2, 3, 4, 5, 6, 7] +/// ``` +/// +pub fn flat_map(over list: List(a), with fun: fn(a) -> List(b)) -> List(b) { + map(list, fun) + |> flatten +} + /// Reduces a list of elements into a single value by calling a given function /// on each element, going from left to right. /// diff --git a/test/gleam/list_test.gleam b/test/gleam/list_test.gleam index 1e90583..c7e2a34 100644 --- a/test/gleam/list_test.gleam +++ b/test/gleam/list_test.gleam @@ -165,6 +165,11 @@ pub fn flatten_test() { |> should.equal([1, 2, 3, 4]) } +pub fn flat_map_test() { + list.flat_map([1, 10, 20], fn(x) { [x, x + 1] }) + |> should.equal([1, 2, 10, 11, 20, 21]) +} + pub fn fold_test() { [1, 2, 3] |> list.fold([], fn(x, acc) { [x, ..acc] }) |