aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2018-10-30 20:47:05 +0000
committerLouis Pilfold <louis@lpil.uk>2018-10-30 20:47:05 +0000
commitc2315a007135a4361d7032b9f8f490455d571593 (patch)
treea882e8c6e509dd6cefd0f36c608b6feeaeec9af9
parenta7615f479ff1b09cde9e99c5989abcf2f12b8930 (diff)
downloadgleam_stdlib-c2315a007135a4361d7032b9f8f490455d571593.tar.gz
gleam_stdlib-c2315a007135a4361d7032b9f8f490455d571593.zip
Incorrectly detecting recursive typesi
-rw-r--r--src/result.gleam36
1 files changed, 30 insertions, 6 deletions
diff --git a/src/result.gleam b/src/result.gleam
index ad74bb7..1ada6b1 100644
--- a/src/result.gleam
+++ b/src/result.gleam
@@ -29,13 +29,16 @@ pub fn is_error(result) {
}
test is_error {
- is_error(Ok(1)) |> expect:false
- is_error(Error(1)) |> expect:true
+ is_error(Ok(1))
+ |> expect:false
+
+ is_error(Error(1))
+ |> expect:true
}
pub fn map(result, fun) {
case result {
- | Ok(x) -> fun(x)
+ | Ok(x) -> Ok(fun(x))
| Error(_) -> result
}
}
@@ -44,6 +47,7 @@ test map {
Ok(1)
|> map(_, fn(x) { x + 1 })
|> expect:equal(_, Ok(2))
+
Error(1)
|> map(_, fn(x) { x + 1 })
|> expect:equal(Error(1))
@@ -60,6 +64,7 @@ test map_error {
Ok(1)
|> map_error(_, fn(x) { x + 1 })
|> expect:equal(_, Ok(1))
+
Error(1)
|> map_error(_, fn(x) { x + 1 })
|> expect:equal(_, Error(2))
@@ -68,17 +73,31 @@ test map_error {
pub fn flatten(result) {
case result {
| Ok(x) -> x
- | Error(_) -> result
+ | Error(error) -> Error(error)
}
}
+// TODO: This one doesn't type check. I think because we don't generalize for
+// case expressions
+// pub fn flatten(result) {
+// case result {
+// | Ok(x) -> x
+// | Error(_) -> result
+// }
+// }
+
test flatten {
flatten(Ok(Ok(1)))
|> expect:equal(_, Ok(1))
+
flatten(Ok(Error(1)))
|> expect:equal(_, Error(1))
+
flatten(Error(1))
|> expect:equal(_, Error(1))
+
+ flatten(Error(Error(1)))
+ |> expect:equal(_, Error(Error(1)))
}
pub fn flat_map(result, fun) {
@@ -91,9 +110,11 @@ test flat_map {
Error(1)
|> flat_map(_, fn(x) { Ok(x + 1) })
|> expect:equal(_, Error(1))
+
Ok(1)
|> flat_map(_, fn(x) { Ok(x + 1) })
|> expect:equal(_, Ok(2))
+
Ok(1)
|> flat_map(_, fn(_) { Error(1) })
|> expect:equal(_, Error(1))
@@ -107,6 +128,9 @@ pub fn unwrap(result, default) {
}
test unwrap {
- unwrap(Ok(1), 50) |> expect:equal(_, 1)
- unwrap(Error("nope"), 50) |> expect:equal(_, 50)
+ unwrap(Ok(1), 50)
+ |> expect:equal(_, 1)
+
+ unwrap(Error("nope"), 50)
+ |> expect:equal(_, 50)
}