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
Compares two bools and returns the first value’s Order to the second.
Examples
> import gleam/order
> compare(True, False)
order.Gt
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 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(1, 99)
> let name = "User " <> int.to_string(number)
> "Welcome, " <> name
"Welcome, User 54"
pub fn max(a: Bool, b: Bool) -> Bool
Returns True if either argument’s value is True.
Examples
> max(True, False)
True
> max(False, True)
True
> max(False, False)
False
pub fn min(a: Bool, b: Bool) -> Bool
Returns False if either bool value is False.
Examples
> min(True, False)
False
> min(False, True)
False
> min(False, False)
False
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
Returns a numeric representation of the given bool.
Examples
> to_int(True)
1
> to_int(False)
0