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 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
Returns a numeric representation of the given bool.
Examples
to_int(True)
// -> 1
to_int(False)
// -> 0