Option
Edit on GitHubUtilities for working with the Option data type.
The Option type is an enum that represents the possibility of something being present (with the Some variant), or not (with the None variant). There’s no standalone null or nil type in Grain; use an Option where you would normally reach for null or nil.
Added in 0.2.0
No other changes yet.
Values
Functions and constants included in the Option module.
Option.isSome
Added in 0.2.0
No other changes yet.
Checks if the Option is the Some variant.
Parameters:
| param | type | description |
|---|---|---|
option |
Option<a> |
The option to check |
Returns:
| type | description |
|---|---|
Bool |
true if the Option is the Some variant or false otherwise |
Option.isNone
Added in 0.2.0
No other changes yet.
Checks if the Option is the None variant.
Parameters:
| param | type | description |
|---|---|---|
option |
Option<a> |
The option to check |
Returns:
| type | description |
|---|---|
Bool |
true if the Option is the None variant or false otherwise |
Option.contains
Added in 0.2.0
No other changes yet.
Checks if the Option is the Some variant and contains the given value. Uses the generic == equality operator.
Parameters:
| param | type | description |
|---|---|---|
value |
a |
The value to search for |
option |
Option<a> |
The option to search |
Returns:
| type | description |
|---|---|
Bool |
true if the Option is equivalent to Some(value) or false otherwise |
Option.expect
Added in 0.2.0
No other changes yet.
Extracts the value inside a Some option, otherwise throws an
exception containing the message provided.
Parameters:
| param | type | description |
|---|---|---|
msg |
String |
The message to use upon failure |
option |
Option<a> |
The option to extract a value from |
Returns:
| type | description |
|---|---|
a |
The unwrapped value if the Option is the Some variant |
Throws:
Failure(String)
- When the
optionisNone
Option.unwrap
Added in 0.2.0
No other changes yet.
Extracts the value inside a Some option, otherwise
throws an exception containing a default message.
Parameters:
| param | type | description |
|---|---|---|
option |
Option<a> |
The option to extract the value from |
Returns:
| type | description |
|---|---|
a |
The unwrapped value if the Option is the Some variant |
Throws:
Failure(String)
- When the
optionisNone
Option.unwrapWithDefault
Added in 0.2.0
No other changes yet.
Extracts the value inside a Some option or provide the default value if None.
Parameters:
| param | type | description |
|---|---|---|
default |
a |
The default value |
option |
Option<a> |
The option to unwrap |
Returns:
| type | description |
|---|---|
a |
The unwrapped value if the Option is the Some variant or the default value otherwise |
Option.map
Added in 0.2.0
No other changes yet.
If the Option is Some(value), applies the given function to the value and wraps the new value in a Some variant.
Parameters:
| param | type | description |
|---|---|---|
fn |
a => b |
The function to call on the value of a Some variant |
option |
Option<a> |
The option to map |
Returns:
| type | description |
|---|---|
Option<b> |
A new Some variant produced by the mapping function if the variant was Some or the unmodified None otherwise |
Option.mapWithDefault
Added in 0.2.0
No other changes yet.
If the Option is Some(value), applies the given function to the value to produce a new value, otherwise uses the default value.
Useful for unwrapping an Option while providing a fallback for any None variants.
Parameters:
| param | type | description |
|---|---|---|
fn |
a => b |
The function to call on the value of a Some variant |
default |
b |
A fallback value for a None variant |
option |
Option<a> |
The option to map |
Returns:
| type | description |
|---|---|
b |
The value produced by the mapping function if the Option is of the Some variant or the default value otherwise |
Option.mapWithDefaultFn
Added in 0.2.0
No other changes yet.
If the Option is Some(value), applies the fn function to the value to produce a new value.
If the Option is None, calls the defaultFn function to produce a new value.
Useful for unwrapping an Option into a value, whether it is Some or None.
Parameters:
| param | type | description |
|---|---|---|
fn |
a => b |
The function to call on the value of a Some variant |
defaultFn |
() => b |
The default function |
option |
Option<a> |
The option to map |
Returns:
| type | description |
|---|---|
b |
The value produced by one of the mapping functions |
Option.flatMap
Added in 0.2.0
No other changes yet.
If the Option is Some(value), applies the given function to the value to produce a new Option.
Parameters:
| param | type | description |
|---|---|---|
fn |
a => Option<b> |
The function to call on the value of a Some variant |
option |
Option<a> |
The option to map |
Returns:
| type | description |
|---|---|
Option<b> |
A new Option produced by the mapping function if the variant was Some or the unmodified None otherwise |
Option.filter
Added in 0.2.0
No other changes yet.
Converts Some(value) variants to None variants where the predicate function returns false.
if the fn return true returns Some(value), otherwise returns None.
Parameters:
| param | type | description |
|---|---|---|
fn |
a => Bool |
The predicate function to indicate if the option should remain Some |
option |
Option<a> |
The option to inspect |
Returns:
| type | description |
|---|---|
Option<a> |
Some(value) if the variant was Some and the predicate returns true or None otherwise |
Option.zip
Added in 0.2.0
No other changes yet.
Combine two Options into a single Option containing a tuple of their values.
Parameters:
| param | type | description |
|---|---|---|
optionA |
Option<a> |
The first option to combine |
optionB |
Option<b> |
The second option to combine |
Returns:
| type | description |
|---|---|
Option<(a, b)> |
Some((valueA, valueB)) if both Options are Some variants or None otherwise |
Option.zipWith
Added in 0.2.0
No other changes yet.
Combine two Options into a single Option. The new value is produced by applying the given function to both values.
Parameters:
| param | type | description |
|---|---|---|
fn |
(a, b) => c |
The function to generate a new value |
optionA |
Option<a> |
The first option to combine |
optionB |
Option<b> |
The second option to combine |
Returns:
| type | description |
|---|---|
Option<c> |
Some(newValue) if both Options are Some variants or None otherwise |
Option.flatten
Added in 0.2.0
No other changes yet.
Flattens nested Options.
Parameters:
| param | type | description |
|---|---|---|
option |
Option<Option<a>> |
The option to flatten |
Returns:
| type | description |
|---|---|
Option<a> |
Some(innerValue) if all nested options were the Some variant or None otherwise |
Examples:
Option.toList
Added in 0.2.0
No other changes yet.
Converts an Option to a list with either zero or one item.
Parameters:
| param | type | description |
|---|---|---|
option |
Option<a> |
The option to convert |
Returns:
| type | description |
|---|---|
List<a> |
[value] if the Option was the Some variant or [] otherwise |
Option.toArray
Added in 0.2.0
No other changes yet.
Converts an Option to an array with either zero or one item.
Parameters:
| param | type | description |
|---|---|---|
option |
Option<a> |
The option to convert |
Returns:
| type | description |
|---|---|
Array<a> |
[> value] if the Option was the Some variant or [> ] otherwise |
Option.toResult
Added in 0.2.0
No other changes yet.
Converts the Option to a Result, using the provided error in case of the None variant.
Parameters:
| param | type | description |
|---|---|---|
err |
a |
The error to use if the option is None |
option |
Option<b> |
The option to convert |
Returns:
| type | description |
|---|---|
Result<b, a> |
Ok(value) if the Option is Some(value) or Err(err) if the Option is None |
Option.sideEffect
Added in 0.2.0
No other changes yet.
If the Option is Some(value), applies the fn function to the value without producing a new value.
Parameters:
| param | type | description |
|---|---|---|
fn |
a => Void |
The function to call on the value of a Some variant |
option |
Option<a> |
The option to inspect |
Option.peek
Added in 0.2.0
No other changes yet.
If the Option is Some(value), applies the fn function to the value without producing a new value.
Useful for inspecting Options without changing anything.
Parameters:
| param | type | description |
|---|---|---|
fn |
a => Void |
The function to call on the value of a Some variant |
option |
Option<a> |
The option to inspect |
Returns:
| type | description |
|---|---|
Option<a> |
The unmodified option |
Option.(||)
Added in 0.6.0
| version | changes |
|---|---|
0.2.0 | Originally named `or` |
Behaves like a logical OR (||) where the first Option is only returned if it is the Some variant and falling back to the second Option in all other cases.
Parameters:
| param | type | description |
|---|---|---|
optionA |
Option<a> |
The first option |
optionB |
Option<a> |
The second option |
Returns:
| type | description |
|---|---|
Option<a> |
The first Option if it is the Some variant or the second Option otherwise |
Option.(&&)
Added in 0.6.0
| version | changes |
|---|---|
0.2.0 | Originally named `and` |
Behaves like a logical AND (&&) where the first Option is only returned if it is the None variant and falling back to the second Option Result in all other cases.
Parameters:
| param | type | description |
|---|---|---|
optionA |
Option<a> |
The first option |
optionB |
Option<a> |
The second option |
Returns:
| type | description |
|---|---|
Option<a> |
The second Option if both are the Some variant or the first Option otherwise |