Packages
gleam_stdlib
0.69.0
1.0.3
1.0.2
1.0.1
1.0.0
0.71.0
0.70.0
0.69.0
0.68.1
0.68.0
0.67.1
0.67.0
0.65.0
0.64.0
0.63.2
0.63.1
0.63.0
0.62.1
0.62.0
0.61.0
0.60.0
0.59.0
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.1
0.35.0
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.1
0.26.0
0.25.0
0.24.0
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.18.0-rc1
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.4.0-rc1
0.3.1
0.3.0
0.2.0
retired
A standard library for the Gleam programming language
Current section
Files
Jump to
Current section
Files
src/gleam@option.erl
-module(gleam@option).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleam/option.gleam").
-export([all/1, is_some/1, is_none/1, to_result/2, from_result/1, unwrap/2, lazy_unwrap/2, map/2, flatten/1, then/2, 'or'/2, lazy_or/2, values/1]).
-export_type([option/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type option(EL) :: {some, EL} | none.
-file("src/gleam/option.gleam", 59).
-spec reverse_and_prepend(list(FA), list(FA)) -> list(FA).
reverse_and_prepend(Prefix, Suffix) ->
case Prefix of
[] ->
Suffix;
[First | Rest] ->
reverse_and_prepend(Rest, [First | Suffix])
end.
-file("src/gleam/option.gleam", 44).
-spec all_loop(list(option(ER)), list(ER)) -> option(list(ER)).
all_loop(List, Acc) ->
case List of
[] ->
{some, lists:reverse(Acc)};
[none | _] ->
none;
[{some, First} | Rest] ->
all_loop(Rest, [First | Acc])
end.
-file("src/gleam/option.gleam", 40).
?DOC(
" Combines a list of `Option`s into a single `Option`.\n"
" If all elements in the list are `Some` then returns a `Some` holding the list of values.\n"
" If any element is `None` then returns `None`.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" all([Some(1), Some(2)])\n"
" // -> Some([1, 2])\n"
" ```\n"
"\n"
" ```gleam\n"
" all([Some(1), None])\n"
" // -> None\n"
" ```\n"
).
-spec all(list(option(EM))) -> option(list(EM)).
all(List) ->
all_loop(List, []).
-file("src/gleam/option.gleam", 80).
?DOC(
" Checks whether the `Option` is a `Some` value.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" is_some(Some(1))\n"
" // -> True\n"
" ```\n"
"\n"
" ```gleam\n"
" is_some(None)\n"
" // -> False\n"
" ```\n"
).
-spec is_some(option(any())) -> boolean().
is_some(Option) ->
Option /= none.
-file("src/gleam/option.gleam", 98).
?DOC(
" Checks whether the `Option` is a `None` value.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" is_none(Some(1))\n"
" // -> False\n"
" ```\n"
"\n"
" ```gleam\n"
" is_none(None)\n"
" // -> True\n"
" ```\n"
).
-spec is_none(option(any())) -> boolean().
is_none(Option) ->
Option =:= none.
-file("src/gleam/option.gleam", 116).
?DOC(
" Converts an `Option` type to a `Result` type.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" to_result(Some(1), \"some_error\")\n"
" // -> Ok(1)\n"
" ```\n"
"\n"
" ```gleam\n"
" to_result(None, \"some_error\")\n"
" // -> Error(\"some_error\")\n"
" ```\n"
).
-spec to_result(option(FI), FL) -> {ok, FI} | {error, FL}.
to_result(Option, E) ->
case Option of
{some, A} ->
{ok, A};
none ->
{error, E}
end.
-file("src/gleam/option.gleam", 137).
?DOC(
" Converts a `Result` type to an `Option` type.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" from_result(Ok(1))\n"
" // -> Some(1)\n"
" ```\n"
"\n"
" ```gleam\n"
" from_result(Error(\"some_error\"))\n"
" // -> None\n"
" ```\n"
).
-spec from_result({ok, FO} | {error, any()}) -> option(FO).
from_result(Result) ->
case Result of
{ok, A} ->
{some, A};
{error, _} ->
none
end.
-file("src/gleam/option.gleam", 158).
?DOC(
" Extracts the value from an `Option`, returning a default value if there is none.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" unwrap(Some(1), 0)\n"
" // -> 1\n"
" ```\n"
"\n"
" ```gleam\n"
" unwrap(None, 0)\n"
" // -> 0\n"
" ```\n"
).
-spec unwrap(option(FT), FT) -> FT.
unwrap(Option, Default) ->
case Option of
{some, X} ->
X;
none ->
Default
end.
-file("src/gleam/option.gleam", 179).
?DOC(
" Extracts the value from an `Option`, evaluating the default function if the option is `None`.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" lazy_unwrap(Some(1), fn() { 0 })\n"
" // -> 1\n"
" ```\n"
"\n"
" ```gleam\n"
" lazy_unwrap(None, fn() { 0 })\n"
" // -> 0\n"
" ```\n"
).
-spec lazy_unwrap(option(FV), fun(() -> FV)) -> FV.
lazy_unwrap(Option, Default) ->
case Option of
{some, X} ->
X;
none ->
Default()
end.
-file("src/gleam/option.gleam", 204).
?DOC(
" Updates a value held within the `Some` of an `Option` by calling a given function\n"
" on it.\n"
"\n"
" If the `Option` is a `None` rather than `Some`, the function is not called and the\n"
" `Option` stays the same.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" map(over: Some(1), with: fn(x) { x + 1 })\n"
" // -> Some(2)\n"
" ```\n"
"\n"
" ```gleam\n"
" map(over: None, with: fn(x) { x + 1 })\n"
" // -> None\n"
" ```\n"
).
-spec map(option(FX), fun((FX) -> FZ)) -> option(FZ).
map(Option, Fun) ->
case Option of
{some, X} ->
{some, Fun(X)};
none ->
none
end.
-file("src/gleam/option.gleam", 230).
?DOC(
" Merges a nested `Option` into a single layer.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" flatten(Some(Some(1)))\n"
" // -> Some(1)\n"
" ```\n"
"\n"
" ```gleam\n"
" flatten(Some(None))\n"
" // -> None\n"
" ```\n"
"\n"
" ```gleam\n"
" flatten(None)\n"
" // -> None\n"
" ```\n"
).
-spec flatten(option(option(GB))) -> option(GB).
flatten(Option) ->
case Option of
{some, X} ->
X;
none ->
none
end.
-file("src/gleam/option.gleam", 269).
?DOC(
" Updates a value held within the `Some` of an `Option` by calling a given function\n"
" on it, where the given function also returns an `Option`. The two options are\n"
" then merged together into one `Option`.\n"
"\n"
" If the `Option` is a `None` rather than `Some` the function is not called and the\n"
" option stays the same.\n"
"\n"
" This function is the equivalent of calling `map` followed by `flatten`, and\n"
" it is useful for chaining together multiple functions that return `Option`.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" then(Some(1), fn(x) { Some(x + 1) })\n"
" // -> Some(2)\n"
" ```\n"
"\n"
" ```gleam\n"
" then(Some(1), fn(x) { Some(#(\"a\", x)) })\n"
" // -> Some(#(\"a\", 1))\n"
" ```\n"
"\n"
" ```gleam\n"
" then(Some(1), fn(_) { None })\n"
" // -> None\n"
" ```\n"
"\n"
" ```gleam\n"
" then(None, fn(x) { Some(x + 1) })\n"
" // -> None\n"
" ```\n"
).
-spec then(option(GF), fun((GF) -> option(GH))) -> option(GH).
then(Option, Fun) ->
case Option of
{some, X} ->
Fun(X);
none ->
none
end.
-file("src/gleam/option.gleam", 300).
?DOC(
" Returns the first value if it is `Some`, otherwise returns the second value.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" or(Some(1), Some(2))\n"
" // -> Some(1)\n"
" ```\n"
"\n"
" ```gleam\n"
" or(Some(1), None)\n"
" // -> Some(1)\n"
" ```\n"
"\n"
" ```gleam\n"
" or(None, Some(2))\n"
" // -> Some(2)\n"
" ```\n"
"\n"
" ```gleam\n"
" or(None, None)\n"
" // -> None\n"
" ```\n"
).
-spec 'or'(option(GK), option(GK)) -> option(GK).
'or'(First, Second) ->
case First of
{some, _} ->
First;
none ->
Second
end.
-file("src/gleam/option.gleam", 331).
?DOC(
" Returns the first value if it is `Some`, otherwise evaluates the given function for a fallback value.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" lazy_or(Some(1), fn() { Some(2) })\n"
" // -> Some(1)\n"
" ```\n"
"\n"
" ```gleam\n"
" lazy_or(Some(1), fn() { None })\n"
" // -> Some(1)\n"
" ```\n"
"\n"
" ```gleam\n"
" lazy_or(None, fn() { Some(2) })\n"
" // -> Some(2)\n"
" ```\n"
"\n"
" ```gleam\n"
" lazy_or(None, fn() { None })\n"
" // -> None\n"
" ```\n"
).
-spec lazy_or(option(GO), fun(() -> option(GO))) -> option(GO).
lazy_or(First, Second) ->
case First of
{some, _} ->
First;
none ->
Second()
end.
-file("src/gleam/option.gleam", 352).
-spec values_loop(list(option(GW)), list(GW)) -> list(GW).
values_loop(List, Acc) ->
case List of
[] ->
lists:reverse(Acc);
[none | Rest] ->
values_loop(Rest, Acc);
[{some, First} | Rest@1] ->
values_loop(Rest@1, [First | Acc])
end.
-file("src/gleam/option.gleam", 348).
?DOC(
" Given a list of `Option`s,\n"
" returns only the values inside `Some`.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" values([Some(1), None, Some(3)])\n"
" // -> [1, 3]\n"
" ```\n"
).
-spec values(list(option(GS))) -> list(GS).
values(Options) ->
values_loop(Options, []).