In Effect-TS, various mapping functions can be applied to the values inside an Option to transform, replace, or manipulate the contained values. This article explores different mapping functions provided by Effect-TS with practical examples.
Example 1: Basic Mapping with O.map
Use O.map
to apply a transformation function to the value inside an Option. If the Option is Some
, the function is applied; otherwise, the result is None
.
import { Option as O, pipe } from 'effect';
function mapping_ex01() {
const some = O.some(1); // Create an Option containing the value 1
const none = O.none(); // Create an Option representing no value
const increment = (n: number) => n + 1;
console.log(pipe(some, O.map(increment))); // Output: Some(2) (since some contains 1 and 1 + 1 = 2)
console.log(pipe(none, O.map(increment))); // Output: None (since none is None)
}
Example 2: Mapping to a Constant Value with O.as
Use O.as
to replace the value inside the Option with a provided constant value.
import { Option as O, pipe } from 'effect';
function mapping_ex02() {
const some = O.some(1); // Create an Option containing the value 1
const none = O.none(); // Create an Option representing no value
console.log(pipe(some, O.as('replaced'))); // Output: Some('replaced') (replaces 1 with 'replaced')
console.log(pipe(none, O.as('replaced'))); // Output: None (since none is None)
}
Explanation:
-
Creating Options: We create two Options, one containing a value (
some
with 1) and another representing no value (none
). -
Applying
O.as
: We useO.as
to replace the value inside the Option with the constant value'replaced'
.
The output is Some('replaced')
for the some
Option and None
for the none
Option, demonstrating how O.as
effectively replaces the original value if it exists.
Example 3: Mapping to void
with O.asVoid
Use O.asVoid
to replace the value inside the Option with undefined
.
import { Option as O, pipe } from 'effect';
function mapping_ex03() {
const some = O.some(1); // Create an Option containing the value 1
const none = O.none(); // Create an Option representing no value
console.log(pipe(some, O.asVoid)); // Output: Some(undefined) (replaces 1 with undefined)
console.log(pipe(none, O.asVoid)); // Output: None (since none is None)
}
Explanation:
- Creating Options: We create two Options, one containing a value (
some
with 1) and another representing no value (none
). - Applying
O.asVoid
: We useO.asVoid
to replace the value inside the Option withundefined
.
The output is Some(undefined)
for the some
Option and None
for the none
Option, demonstrating how O.asVoid
effectively replaces the original value if it exists.
Example 4: FlatMapping with O.flatMap
Use O.flatMap
to apply a transformation function that returns an Option to the value if the Option is Some
, and flatten the result.
import { Option as O, pipe } from 'effect';
function mapping_ex04() {
const some = O.some(1); // Create an Option containing the value 1
const none = O.none(); // Create an Option representing no value
const doubleIfPositive = (n: number) => (n > 0 ? O.some(n * 2) : O.none());
console.log(pipe(some, O.flatMap(doubleIfPositive))); // Output: Some(2) (since some contains 1 and 1 > 0)
console.log(pipe(none, O.flatMap(doubleIfPositive))); // Output: None (since none is None)
}
Explanation:
-
Creating Options: We create two Options, one containing a value (
some
with 1) and another representing no value (none
). -
Applying
O.flatMap
: We useO.flatMap
to apply a transformation function (doubleIfPositive
) that returns an Option. If the value is positive, it doubles the value and wraps it inSome
, otherwise it returnsNone
.
The output is Some(2)
for the some
Option and None
for the none
Option, demonstrating how O.flatMap
flattens the result of the transformation.
Example 5: FlatMapping Nullable Values with O.flatMapNullable
Use O.flatMapNullable
to apply a transformation function that may return a nullable value to the value if the Option is Some
, and convert the result to an Option.
import { Option as O, pipe } from 'effect';
function mapping_ex05() {
const some = O.some({ a: { b: { c: 1 } } }); // Create an Option containing a nested object
const none = O.none(); // Create an Option representing no value
const getCValue = (obj: { a?: { b?: { c?: number } } }) => obj.a?.b?.c ?? null;
console.log(pipe(some, O.flatMapNullable(getCValue))); // Output: Some(1) (extracts the nested value)
console.log(pipe(none, O.flatMapNullable(getCValue))); // Output: None (since none is None)
}
Explanation:
-
Creating Options: We create two Options, one containing a nested object (
some
) and another representing no value (none
). -
Applying
O.flatMapNullable
: We useO.flatMapNullable
to apply a transformation function (getCValue
) that extracts a nested value and may returnnull
. The function returnsSome
if a value is found, otherwise it returnsNone
.
The output is Some(1)
for the some
Option and None
for the none
Option, demonstrating how O.flatMapNullable
converts the result of the transformation to an Option.
Top comments (0)