Hyperlinkv0.8.0-beta.28

Result

Result.flatMapconsteffect/Result.ts:1337
<A, A2, E2>(f: (a: A) => Result<A2, E2>): <E>(
  self: Result<A, E>
) => Result<A2, E | E2>
<A, E, A2, E2>(self: Result<A, E>, f: (a: A) => Result<A2, E2>): Result<
  A2,
  E | E2
>

Chains a function that returns a Result onto a successful value.

When to use

Use to sequence Result-returning computations that should short-circuit on failure.

Details

  • If self is a Success, applies f to the value and returns the resulting Result
  • If self is a Failure, short-circuits and returns it unchanged
  • The error types are merged into a union (E | E2)
  • This is the monadic bind / >>= for Result

Example (Validating sequentially)

import { pipe, Result } from "effect"

const result = pipe(
  Result.succeed(5),
  Result.flatMap((n) =>
    n > 0 ? Result.succeed(n * 2) : Result.fail("not positive")
  )
)
console.log(result)
// Output: { _tag: "Success", success: 10, ... }
sequencingandThenmap
Source effect/Result.ts:13378 lines
export const flatMap: {
  <A, A2, E2>(f: (a: A) => Result<A2, E2>): <E>(self: Result<A, E>) => Result<A2, E | E2>
  <A, E, A2, E2>(self: Result<A, E>, f: (a: A) => Result<A2, E2>): Result<A2, E | E2>
} = dual(
  2,
  <A, E, A2, E2>(self: Result<A, E>, f: (a: A) => Result<A2, E2>): Result<A2, E | E2> =>
    isFailure(self) ? fail(self.failure) : f(self.success)
)
Referenced by 3 symbols