aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2018-11-04 17:32:05 +0000
committerLouis Pilfold <louis@lpil.uk>2018-11-04 17:32:05 +0000
commitc85b60fb29c95fc501ae2b56e3fb716d772e59e0 (patch)
treebac8f081ccb2d5ae616b55a31c74954b91413ca9 /src
parentc2315a007135a4361d7032b9f8f490455d571593 (diff)
downloadgleam_stdlib-c85b60fb29c95fc501ae2b56e3fb716d772e59e0.tar.gz
gleam_stdlib-c85b60fb29c95fc501ae2b56e3fb716d772e59e0.zip
Codegen for calling module fns
Diffstat (limited to 'src')
-rw-r--r--src/result.gleam27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/result.gleam b/src/result.gleam
index 1ada6b1..38dd552 100644
--- a/src/result.gleam
+++ b/src/result.gleam
@@ -1,9 +1,9 @@
import expect
-doc """
-Result represents the result of something that may succeed or fail.
-`Ok` means it was successful, `Error` means it failed.
-"""
+// doc """
+// Result represents the result of something that may succeed or fail.
+// `Ok` means it was successful, `Error` means it failed.
+// """
pub enum Result(error, value) =
| Ok(value)
| Error(error)
@@ -100,10 +100,21 @@ test flatten {
|> expect:equal(_, Error(Error(1)))
}
+// pub fn flat_map(result, fun) {
+// result
+// |> map(_, fun)
+// |> flatten
+// }
+
pub fn flat_map(result, fun) {
- result
- |> map(_, fun)
- |> flatten
+ case result {
+ | Ok(x) ->
+ case fun(x) {
+ | Ok(y) -> Ok(y)
+ | Error(y) -> Error(y)
+ }
+ | Error(_) -> result
+ }
}
test flat_map {
@@ -116,7 +127,7 @@ test flat_map {
|> expect:equal(_, Ok(2))
Ok(1)
- |> flat_map(_, fn(_) { Error(1) })
+ |> flat_map(_, fn(unused) { Error(1) })
|> expect:equal(_, Error(1))
}