diff options
author | Sebastian Porto <s@porto5.com> | 2021-05-08 00:56:23 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-07 14:56:23 +0000 |
commit | 26f42e83dd5a842e4463b1613729c16f0251cef4 (patch) | |
tree | 439195e0b0756dec80c7c9ae846a621382529d16 | |
parent | 3e3f49ac6b09a0e395d3d4f9cca3c811b2002c87 (diff) | |
download | gleam_stdlib-26f42e83dd5a842e4463b1613729c16f0251cef4.tar.gz gleam_stdlib-26f42e83dd5a842e4463b1613729c16f0251cef4.zip |
Add result.values (#204)
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | src/gleam/result.gleam | 14 | ||||
-rw-r--r-- | test/gleam/result_test.gleam | 5 |
3 files changed, 20 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 747bf99..bcbb957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- The `result` module gains the `values` function. - All modules now use the new `#(a, b, ...)` tuple syntax. ## v0.15.0 - 2021-05-05 diff --git a/src/gleam/result.gleam b/src/gleam/result.gleam index 47fe956..d0601bf 100644 --- a/src/gleam/result.gleam +++ b/src/gleam/result.gleam @@ -264,3 +264,17 @@ pub fn replace_error(result: Result(a, e1), error: e2) -> Result(a, e2) { result |> map_error(fn(_) { error }) } + +/// Given a list of results +/// Return only the values inside Ok +/// +/// ## Examples +/// +/// ``` +/// > values([Ok(1), None, Ok(3)]) +/// [1, 3] +/// ``` +/// +pub fn values(results: List(Result(a, e))) -> List(a) { + list.filter_map(results, fn(r) { r }) +} diff --git a/test/gleam/result_test.gleam b/test/gleam/result_test.gleam index 5eb8a37..a2bd6ff 100644 --- a/test/gleam/result_test.gleam +++ b/test/gleam/result_test.gleam @@ -162,3 +162,8 @@ pub fn replace_error_test() { |> result.replace_error("Invalid") |> should.equal(Error("Invalid")) } + +pub fn values_test() { + result.values([Ok(1), Error(""), Ok(3)]) + |> should.equal([1, 3]) +} |