diff options
author | Louis Pilfold <louis@lpil.uk> | 2023-01-21 12:27:50 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-02-26 18:51:30 +0000 |
commit | e005df1fc88f957d2537453ccd8863eca324c5bd (patch) | |
tree | 1a9c970d63d9b5b3d4c7601cb070d5a9cb22a0fe /src | |
parent | 6bb693f1af14a3ddbc3fd28468e07197e46cbaa9 (diff) | |
download | gleam_stdlib-e005df1fc88f957d2537453ccd8863eca324c5bd.tar.gz gleam_stdlib-e005df1fc88f957d2537453ccd8863eca324c5bd.zip |
result.guard
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/result.gleam | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/gleam/result.gleam b/src/gleam/result.gleam index e64e96a..c2d92a1 100644 --- a/src/gleam/result.gleam +++ b/src/gleam/result.gleam @@ -411,3 +411,36 @@ pub fn replace_error(result: Result(a, e1), error: e2) -> Result(a, e2) { pub fn values(results: List(Result(a, e))) -> List(a) { list.filter_map(results, fn(r) { r }) } + +/// Run a callback function if the given bool is `True`, otherwise return a +/// default error value. +/// +/// This function is suitable for `use` expressions. +/// +/// ## Examples +/// +/// ```gleam +/// > let name = "Kamaka" +/// > use <- guard(name != "", or: "Missing name") +/// > "Hello, " <> name +/// Ok("Hello, Kamaka") +/// ``` +/// +/// ```gleam +/// > let name = "" +/// > use <- guard(name != "", or: "Missing name") +/// > "Hello, " <> name +/// Error("Missing name") +/// ``` +/// +/// +pub fn guard( + requirement: Bool, + or error: e, + then consequence: fn() -> Result(a, e), +) -> Result(a, e) { + case requirement { + True -> consequence() + False -> Error(error) + } +} |