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 True
, 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 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