Hyperlinkv0.8.0-beta.28

Effect

Effect.flatMapEagerconsteffect/Effect.ts:15360
<A, B, E2, R2>(f: (a: A) => Effect<B, E2, R2>): <E, R>(
  self: Effect<A, E, R>
) => Effect<B, E | E2, R | R2>
<A, E, R, B, E2, R2>(
  self: Effect<A, E, R>,
  f: (a: A) => Effect<B, E2, R2>
): Effect<B, E | E2, R | R2>

Applies flatMap eagerly when an effect is already resolved.

When to use

Use when an already-resolved successful effect should bind immediately to the next effect while pending effects still use regular flat mapping.

Details

Success effects apply the flatMap function immediately. Failure effects pass through unchanged, and pending effects fall back to regular flatMap behavior.

Example (Flat mapping eagerly when possible)

import { Effect } from "effect"

// For resolved effects, the flatMap is applied immediately
const resolved = Effect.succeed(5)
const flatMapped = Effect.flatMapEager(resolved, (n) => Effect.succeed(n * 2)) // Applied eagerly

// For pending effects, behaves like regular flatMap
const pending = Effect.delay(Effect.succeed(5), "100 millis")
const flatMappedPending = Effect.flatMapEager(
  pending,
  (n) => Effect.succeed(n * 2)
) // Uses regular flatMap
eager
export const flatMapEager: {
  <A, B, E2, R2>(f: (a: A) => Effect<B, E2, R2>): <E, R>(self: Effect<A, E, R>) => Effect<B, E | E2, R | R2>
  <A, E, R, B, E2, R2>(self: Effect<A, E, R>, f: (a: A) => Effect<B, E2, R2>): Effect<B, E | E2, R | R2>
} = internal.flatMapEager
Referenced by 4 symbols