gleam/bool
A type with two possible values, True and False. Used to indicate whether
things are… true or false!
Often is it clearer and offers more type safety to define a custom type
than to use Bool. For example, rather than having a is_teacher: Bool
field consider having a role: SchoolRole field where SchoolRole is a custom
type that can be either Student or Teacher.
Functions
pub fn and(a: Bool, b: Bool) -> Bool
Returns the and of two bools, but it evaluates both arguments.
It’s the function equivalent of the && operator.
This function is useful in higher order functions or pipes.
Examples
and(True, True)
// -> True
and(False, True)
// -> False
False |> and(True)
// -> False
pub fn compare(a: Bool, with b: Bool) -> Order
Deprecated: Please use a case expression to get the behaviour you desire
pub fn exclusive_nor(a: Bool, b: Bool) -> Bool
Returns the exclusive nor of two bools.
Examples
exclusive_nor(False, False)
// -> True
exclusive_nor(False, True)
// -> False
exclusive_nor(True, False)
// -> False
exclusive_nor(True, True)
// -> True
pub fn exclusive_or(a: Bool, b: Bool) -> Bool
Returns the exclusive or of two bools.
Examples
exclusive_or(False, False)
// -> False
exclusive_or(False, True)
// -> True
exclusive_or(True, False)
// -> True
exclusive_or(True, True)
// -> False
pub fn guard(
when requirement: Bool,
return consequence: a,
otherwise alternative: fn() -> a,
) -> a
Run a callback function if the given bool is False, otherwise return a
default value.
With a use expression this function can simulate the early-return pattern
found in some other programming languages.
In a procedural language:
if (predicate) return value;
// ...
In Gleam with a use expression:
use <- guard(when: predicate, return: value)
// ...
Like everything in Gleam use is an expression, so it short circuits the
current block, not the entire function. As a result you can assign the value
to a variable:
let x = {
use <- guard(when: predicate, return: value)
// ...
}
Note that unlike in procedural languages the return value is evaluated
even when the predicate is False, so it is advisable not to perform
expensive computation nor side-effects there.
Examples
let name = ""
use <- guard(when: name == "", return: "Welcome!")
"Hello, " <> name
// -> "Welcome!"
let name = "Kamaka"
use <- guard(when: name == "", return: "Welcome!")
"Hello, " <> name
// -> "Hello, Kamaka"
pub fn lazy_guard(
when requirement: Bool,
return consequence: fn() -> a,
otherwise alternative: fn() -> a,
) -> a
Runs a callback function if the given bool is True, otherwise runs an
alternative callback function.
Useful when further computation should be delayed regardless of the given bool’s value.
See guard for more info.
Examples
let name = "Kamaka"
let inquiry = fn() { "How may we address you?" }
use <- lazy_guard(when: name == "", return: inquiry)
"Hello, " <> name
// -> "Hello, Kamaka"
import gleam/int
let name = ""
let greeting = fn() { "Hello, " <> name }
use <- lazy_guard(when: name == "", otherwise: greeting)
let number = int.random(99)
let name = "User " <> int.to_string(number)
"Welcome, " <> name
// -> "Welcome, User 54"
pub fn nand(a: Bool, b: Bool) -> Bool
Returns the nand of two bools.
Examples
nand(False, False)
// -> True
nand(False, True)
// -> True
nand(True, False)
// -> True
nand(True, True)
// -> False
pub fn negate(bool: Bool) -> Bool
Returns the opposite bool value.
This is the same as the ! or not operators in some other languages.
Examples
negate(True)
// -> False
negate(False)
// -> True
pub fn nor(a: Bool, b: Bool) -> Bool
Returns the nor of two bools.
Examples
nor(False, False)
// -> True
nor(False, True)
// -> False
nor(True, False)
// -> False
nor(True, True)
// -> False
pub fn or(a: Bool, b: Bool) -> Bool
Returns the or of two bools, but it evaluates both arguments.
It’s the function equivalent of the || operator.
This function is useful in higher order functions or pipes.
Examples
or(True, True)
// -> True
or(False, True)
// -> True
False |> or(True)
// -> True
pub fn to_int(bool: Bool) -> Int
Deprecated: Please use a case expression to get the behaviour you desire