You are currently looking at the v9.1 - v10.1 docs (Reason v3.6 syntax edition). You can find the latest API docs here.
Option
In Belt we represent the existence and nonexistence of a value by wrapping it
with the option type. In order to make it a bit more convenient to work with
option-types, Belt provides utility-functions for it.
The option type is a part of the Reason / OCaml standard library which is defined like this:
REStype option<'a> = None | Some('a)
RESlet someString: option<string> = Some("hello")
getExn
RESlet getExn: option<'a> => 'a
Raises an Error in case None is provided. Use with care.
RESBelt.Option.getExn(Some(3)) /* 3 */
Belt.Option.getExn(None) /* Raises an Error */
mapWithDefault
RESlet mapWithDefault: (option<'a>, 'b, 'a => 'b) => 'b
If optionValue is of Some(value),
this function returns that value applied with f, in other words f(value).
If optionValue is None, the default is returned.
RESlet someValue = Some(3)
someValue->Belt.Option.mapWithDefault(0, x => x + 5) /* 8 */
let noneValue = None
noneValue->Belt.Option.mapWithDefault(0, x => x + 5) /* 0 */
mapWithDefaultU
RESlet mapWithDefaultU: (option<'a>, 'b, (. 'a) => 'b) => 'b
Uncurried version of mapWithDefault.
map
RESlet map: (option<'a>, 'a => 'b) => option<'b>
If optionValue is Some(value) this returns f(value), otherwise it returns None.
RESBelt.Option.map(Some(3), x => x * x) /* Some(9) */
Belt.Option.map(None, x => x * x) /* None */
mapU
RESlet mapU: (option<'a>, (. 'a) => 'b) => option<'b>
Uncurried version of map.
flatMap
RESlet flatMap: (option<'a>, 'a => option<'b>) => option<'b>
If optionValue is Some(value), returns f(value), otherwise returns
None.
The function f must have a return type of option<'b>.
RESlet addIfAboveOne = value =>
if (value > 1) {
Some(value + 1)
} else {
None
}
Belt.Option.flatMap(Some(2), addIfAboveOne) /* Some(3) */
Belt.Option.flatMap(Some(-4), addIfAboveOne) /* None */
Belt.Option.flatMap(None, addIfAboveOne) /* None */
flatMapU
RESlet flatMapU: (option<'a>, (. 'a) => option<'b>) => option<'b>
Uncurried version of flatMap.
getWithDefault
RESlet getWithDefault: (option<'a>, 'a) => 'a
If optionalValue is Some(value), returns value, otherwise default.
RESBelt.Option.getWithDefault(None, "Banana") /* Banana */
Belt.Option.getWithDefault(Some("Apple"), "Banana") /* Apple */
RESlet greet = (firstName: option<string>) =>
"Greetings " ++ firstName->Belt.Option.getWithDefault("Anonymous")
Some("Jane")->greet /* "Greetings Jane" */
None->greet /* "Greetings Anonymous" */
RESBelt.Option.getWithDefault(Some(1812), 1066) /* 1812 */
Belt.Option.getWithDefault(None, 1066) /* 1066 */
isSome
RESlet isSome: option<'a> => bool
Returns true if the argument is Some(value), false otherwise.
RESBelt.Option.isSome(None) /* false */
Belt.Option.isSome(Some(1)) /* true */
isNone
RESlet isNone: option<'a> => bool
Returns true if the argument is None, false otherwise.
RESBelt.Option.isNone(None) /* true */
Belt.Option.isNone(Some(1)) /* false */
eq
RESlet eq: (option<'a>, option<'b>, ('a, 'b) => bool) => bool
Evaluates two optional values for equality with respect to a predicate
function. If both optValue1 and optValue2 are None, returns true.
If one of the arguments is Some(value) and the other is None, returns
false.
If arguments are Some(value1) and Some(value2), returns the result of
predicate(value1, value2); the predicate function must return a bool.
RESlet clockEqual = (a, b) => mod(a, 12) == mod(b, 12)
open Belt.Option
eq(Some(3), Some(15), clockEqual) /* true */
eq(Some(3), None, clockEqual) /* false */
eq(None, Some(3), clockEqual) /* false */
eq(None, None, clockEqual) /* true */
eqU
RESlet eqU: (option<'a>, option<'b>, (.'a, 'b) => bool) => bool
Uncurried version of eq.
cmp
RESlet cmp: (option<'a>, option<'b>, ('a, 'b) => int) => int
cmp(optValue1, optValue2, comparisonFunction) compares two optional values
with respect to given comparisonFunction.
If both optValue1 and optValue2 are None, it returns 0.
If the first argument is Some(value1) and the second is None, returns 1
(something is greater than nothing).
If the first argument is None and the second is Some(value2), returns -1
(nothing is less than something).
If the arguments are Some(value1) and Some(value2), returns the result of
comparisonFunction(value1, value2); comparisonFunction takes two arguments
and returns -1 if the first argument is less than the second, 0 if the
arguments are equal, and 1 if the first argument is greater than the second.
RESlet clockCompare = (a, b) => compare(mod(a, 12), mod(b, 12))
open Belt.Option
cmp(Some(3), Some(15), clockCompare) /* 0 */
cmp(Some(3), Some(14), clockCompare) /* 1 */
cmp(Some(2), Some(15), clockCompare) /* (-1) */
cmp(None, Some(15), clockCompare) /* (-1) */
cmp(Some(14), None, clockCompare) /* 1 */
cmp(None, None, clockCompare) /* 0 */
cmpU
RESlet cmpU: (option<'a>, option<'b>, ((.'a, 'b) => int)) => int
Uncurried version of cmp.