Home >Web Front-end >JS Tutorial >Using do Notation in Effect-TS Optionals

Using do Notation in Effect-TS Optionals

PHPz
PHPzOriginal
2024-07-23 10:32:231003browse

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: 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`)
    }
    </p>

    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.

    The above is the detailed content of Using do Notation in Effect-TS Optionals. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn