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 (
somewith 1) and another representing no value (none). -
Applying
O.as: We useO.asto 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 (
somewith 1) and another representing no value (none). - Applying
O.asVoid: We useO.asVoidto 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 (
somewith 1) and another representing no value (none). -
Applying
O.flatMap: We useO.flatMapto 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.flatMapNullableto apply a transformation function (getCValue) that extracts a nested value and may returnnull. The function returnsSomeif 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)