Using do Notation in Effect-TS Optionals

Effect-TS provides a powerful way to handle operations within the Option context using the do notation. This article explores how to sequence multiple operations with do notation and demonstrates various scenarios through examples.

Example 1:…


This content originally appeared on DEV Community and was authored by Alessandro Maclaine

Effect-TS provides a powerful way to handle operations within the Option context using the do notation. This article explores how to sequence multiple operations with do notation and demonstrates various scenarios through examples.

Example 1: Basic Sequencing and Filtering

In this example, we bind values within the Option context, compute a sum, and filter based on a condition.

import { Option as O, pipe } from 'effect';

function do_ex01() {
  const result = pipe(
    O.Do,
    O.bind('x', () => O.some(2)), // Bind x to the value 2 wrapped in Some
    O.bind('y', () => O.some(3)), // Bind y to the value 3 wrapped in Some
    O.let('sum', ({ x, y }) => x + y), // Let sum be the sum of x and y
    O.filter(({ x, y }) => x * y > 5) // Filter the result if x * y > 5
  );
  console.log(result); // Output: Some({ x: 2, y: 3, sum: 5 }) (since 2 * 3 > 5)
}

Explanation:

  • Binding Values: We bind x to 2 and y to 3, both wrapped in Some.
  • Computing Sum: We compute sum as the sum of x and y.
  • Filtering: We filter the result based on the condition x * y > 5.

The output is Some({ x: 2, y: 3, sum: 5 }) because the condition 2 * 3 > 5 is met.

Example 2: Filtering with a Failing Condition

This example shows that if the filter condition fails, the result is None.

function do_ex02() {
  const result = pipe(
    O.Do,
    O.bind('x', () => O.some(1)), // Bind x to the value 1 wrapped in Some
    O.bind('y', () => O.some(2)), // Bind y to the value 2 wrapped in Some
    O.let('sum', ({ x, y }) => x + y), // Let sum be the sum of x and y
    O.filter(({ x, y }) => x * y > 5) // Filter the result if x * y > 5
  );
  console.log(result); // Output: None (since 1 * 2 <= 5)
}

Explanation:

  • Binding Values: We bind x to 1 and y to 2.
  • Computing Sum: We compute sum as the sum of x and y.
  • Filtering: We filter the result based on the condition x * y > 5.

The output is None because the condition 1 * 2 <= 5 fails.

Example 3: Binding with None

This example demonstrates that if any binding is None, the result is None.

function do_ex03() {
  const result = pipe(
    O.Do,
    O.bind('x', () => O.some(2)), // Bind x to the value 2 wrapped in Some
    O.bind('y', () => O.none()), // Bind y to None
    O.let('sum', ({ x, y }) => x + y), // This line won't execute since y is None
    O.filter(({ x, y }) => x * y > 5) // This line won't execute since y is None
  );
  console.log(result); // Output: None (since y is `None`)
}

Explanation:

  • Binding Values: We bind x to 2 and y to None.
  • Skipping Computation and Filtering: Since y is None, the subsequent operations are skipped.

The output is None because one of the bindings (y) isNone`.

Summary

The do notation in Effect-TS allows for elegant and readable sequencing of operations within the Option context. By binding values, letting computed values, and filtering based on conditions, we can handle complex optional logic in a straightforward manner. The examples above illustrate how the result changes based on different conditions and the presence of None.


This content originally appeared on DEV Community and was authored by Alessandro Maclaine


Print Share Comment Cite Upload Translate Updates
APA

Alessandro Maclaine | Sciencx (2024-07-22T16:03:12+00:00) Using do Notation in Effect-TS Optionals. Retrieved from https://www.scien.cx/2024/07/22/using-do-notation-in-effect-ts-optionals/

MLA
" » Using do Notation in Effect-TS Optionals." Alessandro Maclaine | Sciencx - Monday July 22, 2024, https://www.scien.cx/2024/07/22/using-do-notation-in-effect-ts-optionals/
HARVARD
Alessandro Maclaine | Sciencx Monday July 22, 2024 » Using do Notation in Effect-TS Optionals., viewed ,<https://www.scien.cx/2024/07/22/using-do-notation-in-effect-ts-optionals/>
VANCOUVER
Alessandro Maclaine | Sciencx - » Using do Notation in Effect-TS Optionals. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/07/22/using-do-notation-in-effect-ts-optionals/
CHICAGO
" » Using do Notation in Effect-TS Optionals." Alessandro Maclaine | Sciencx - Accessed . https://www.scien.cx/2024/07/22/using-do-notation-in-effect-ts-optionals/
IEEE
" » Using do Notation in Effect-TS Optionals." Alessandro Maclaine | Sciencx [Online]. Available: https://www.scien.cx/2024/07/22/using-do-notation-in-effect-ts-optionals/. [Accessed: ]
rf:citation
» Using do Notation in Effect-TS Optionals | Alessandro Maclaine | Sciencx | https://www.scien.cx/2024/07/22/using-do-notation-in-effect-ts-optionals/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.