gleam/option
Types
Option
represents a value that may be present or not. Some
means the value is
present, None
means the value is not.
This is Gleam’s alternative to having a value that could be Null, as is possible in some other languages.
Option
and Result
In other languages failible functions may return either Result
or
Option
depending on whether there is more information to be given about the
failure. In Gleam all failible functions return Result
, and Nil
is used
as the error if there is no extra detail to give. This consistency removes
the boilerplate that would otherwise be needed to convert between Option
and Result
types, and makes APIs more predictable.
The Option
type should only be used for taking optional values as
function arguments, or for storing them in other data structures.
pub type Option(a) {
Some(a)
None
}
Constructors
-
Some(a)
-
None
Functions
pub fn all(list: List(Option(a))) -> Option(List(a))
Combines a list of Option
s into a single Option
.
If all elements in the list are Some
then returns a Some
holding the list of values.
If any element is None
then returnsNone
.
Examples
all([Some(1), Some(2)])
// -> Some([1, 2])
all([Some(1), None])
// -> None
pub fn flatten(option: Option(Option(a))) -> Option(a)
Merges a nested Option
into a single layer.
Examples
flatten(Some(Some(1)))
// -> Some(1)
flatten(Some(None))
// -> None
flatten(None)
// -> None
pub fn from_result(result: Result(a, b)) -> Option(a)
Converts a Result
type to an Option
type.
Examples
from_result(Ok(1))
// -> Some(1)
from_result(Error("some_error"))
// -> None
pub fn is_none(option: Option(a)) -> Bool
Checks whether the Option
is a None
value.
Examples
is_none(Some(1))
// -> False
is_none(None)
// -> True
pub fn is_some(option: Option(a)) -> Bool
Checks whether the Option
is a Some
value.
Examples
is_some(Some(1))
// -> True
is_some(None)
// -> False
pub fn lazy_or(
first: Option(a),
second: fn() -> Option(a),
) -> Option(a)
Returns the first value if it is Some
, otherwise evaluates the given function for a fallback value.
Examples
lazy_or(Some(1), fn() { Some(2) })
// -> Some(1)
lazy_or(Some(1), fn() { None })
// -> Some(1)
lazy_or(None, fn() { Some(2) })
// -> Some(2)
lazy_or(None, fn() { None })
// -> None
pub fn lazy_unwrap(option: Option(a), or default: fn() -> a) -> a
Extracts the value from an Option
, evaluating the default function if the option is None
.
Examples
lazy_unwrap(Some(1), fn() { 0 })
// -> 1
lazy_unwrap(None, fn() { 0 })
// -> 0
pub fn map(
over option: Option(a),
with fun: fn(a) -> b,
) -> Option(b)
Updates a value held within the Some
of an Option
by calling a given function
on it.
If the Option
is a None
rather than Some
, the function is not called and the
Option
stays the same.
Examples
map(over: Some(1), with: fn(x) { x + 1 })
// -> Some(2)
map(over: None, with: fn(x) { x + 1 })
// -> None
pub fn or(first: Option(a), second: Option(a)) -> Option(a)
Returns the first value if it is Some
, otherwise returns the second value.
Examples
or(Some(1), Some(2))
// -> Some(1)
or(Some(1), None)
// -> Some(1)
or(None, Some(2))
// -> Some(2)
or(None, None)
// -> None
pub fn then(
option: Option(a),
apply fun: fn(a) -> Option(b),
) -> Option(b)
Updates a value held within the Some
of an Option
by calling a given function
on it, where the given function also returns an Option
. The two options are
then merged together into one Option
.
If the Option
is a None
rather than Some
the function is not called and the
option stays the same.
This function is the equivalent of calling map
followed by flatten
, and
it is useful for chaining together multiple functions that return Option
.
Examples
then(Some(1), fn(x) { Some(x + 1) })
// -> Some(2)
then(Some(1), fn(x) { Some(#("a", x)) })
// -> Some(#("a", 1))
then(Some(1), fn(_) { None })
// -> None
then(None, fn(x) { Some(x + 1) })
// -> None
pub fn to_result(option: Option(a), e: b) -> Result(a, b)
Converts an Option
type to a Result
type.
Examples
to_result(Some(1), "some_error")
// -> Ok(1)
to_result(None, "some_error")
// -> Error("some_error")
pub fn unwrap(option: Option(a), or default: a) -> a
Extracts the value from an Option
, returning a default value if there is none.
Examples
unwrap(Some(1), 0)
// -> 1
unwrap(None, 0)
// -> 0