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
pub fn to_string(bool: Bool) -> String

Returns a string representation of the given bool.

Examples

to_string(True)
// -> "True"
to_string(False)
// -> "False"
Search Document