diff options
author | Louis Pilfold <louis@lpil.uk> | 2018-10-30 20:47:05 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2018-10-30 20:47:05 +0000 |
commit | c2315a007135a4361d7032b9f8f490455d571593 (patch) | |
tree | a882e8c6e509dd6cefd0f36c608b6feeaeec9af9 /src | |
parent | a7615f479ff1b09cde9e99c5989abcf2f12b8930 (diff) | |
download | gleam_stdlib-c2315a007135a4361d7032b9f8f490455d571593.tar.gz gleam_stdlib-c2315a007135a4361d7032b9f8f490455d571593.zip |
Incorrectly detecting recursive typesi
Diffstat (limited to 'src')
-rw-r--r-- | src/result.gleam | 36 |
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) } |