From 6bb693f1af14a3ddbc3fd28468e07197e46cbaa9 Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Sat, 21 Jan 2023 12:26:14 +0000 Subject: bool.guard --- src/gleam/bool.gleam | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src') diff --git a/src/gleam/bool.gleam b/src/gleam/bool.gleam index e67fe66..c64ee97 100644 --- a/src/gleam/bool.gleam +++ b/src/gleam/bool.gleam @@ -323,3 +323,36 @@ pub fn to_string(bool: Bool) -> String { True -> "True" } } + +/// Run a callback function if the given bool is `True`, otherwise return a +/// default value. +/// +/// This function is suitable for `use` expressions. +/// +/// ## Examples +/// +/// ```gleam +/// > let name = "Kamaka" +/// > use <- guard(name != "", or: "friend") +/// > "Hello, " <> name +/// "Hello, Kamaka" +/// ``` +/// +/// ```gleam +/// > let name = "" +/// > use <- guard(name != "", or: "friend") +/// > "Hello, " <> name +/// "Hello, friend" +/// ``` +/// +/// +pub fn guard( + requirement: Bool, + or alternative: t, + then consequence: fn() -> t, +) -> t { + case requirement { + True -> consequence() + False -> alternative + } +} -- cgit v1.2.3