aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2022-02-22 17:47:02 +0000
committerLouis Pilfold <louis@lpil.uk>2022-02-22 17:47:02 +0000
commit7b67ae1502b10edbb1589b831db1d8d856dc9b88 (patch)
tree1307267f1d50457a3fbae6a66c9d8d17de76826f
parentddd0135d4bba20e29e1367c3bef8bb47a8dbb0a3 (diff)
downloadgleam_stdlib-7b67ae1502b10edbb1589b831db1d8d856dc9b88.tar.gz
gleam_stdlib-7b67ae1502b10edbb1589b831db1d8d856dc9b88.zip
result.unwrap_both
-rw-r--r--src/gleam/result.gleam22
-rw-r--r--test/gleam/result_test.gleam10
2 files changed, 32 insertions, 0 deletions
diff --git a/src/gleam/result.gleam b/src/gleam/result.gleam
index 5d77408..9f419b5 100644
--- a/src/gleam/result.gleam
+++ b/src/gleam/result.gleam
@@ -202,6 +202,28 @@ pub fn unwrap_error(result: Result(a, e), or default: e) -> e {
}
}
+/// Extracts the inner value from a result. Both the value and error must be of
+/// the same type.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unwrap_both(Error(1))
+/// 1
+/// ```
+///
+/// ```gleam
+/// > unwrap_both(Ok(2))
+/// 2
+/// ```
+///
+pub fn unwrap_both(result: Result(a, a)) -> a {
+ case result {
+ Ok(a) -> a
+ Error(a) -> a
+ }
+}
+
/// Transforms any error into `Error(Nil)`.
///
/// ## Examples
diff --git a/test/gleam/result_test.gleam b/test/gleam/result_test.gleam
index 79f1d6c..c580950 100644
--- a/test/gleam/result_test.gleam
+++ b/test/gleam/result_test.gleam
@@ -97,6 +97,16 @@ pub fn unwrap_error_test() {
|> should.equal(50)
}
+pub fn unwrap_both_test() {
+ Error(1)
+ |> result.unwrap_both
+ |> should.equal(1)
+
+ Ok("yup")
+ |> result.unwrap_both
+ |> should.equal("yup")
+}
+
pub fn lazy_unwrap_test() {
Ok(1)
|> result.lazy_unwrap(fn() { 50 })