Hyperlinkv0.8.0-beta.28

Effect

Effect.unwrapReasonconsteffect/Effect.ts:3142
<K extends TagsWithReason<E>, E>(errorTag: K): <A, R>(
  self: Effect<A, E, R>
) => Effect<A, ExcludeTag<E, K> | ReasonOf<ExtractTag<E, K>>, R>
<A, E, R, K extends TagsWithReason<E>>(
  self: Effect<A, E, R>,
  errorTag: K
): Effect<A, ExcludeTag<E, K> | ReasonOf<ExtractTag<E, K>>, R>

Promotes nested reason errors into the Effect error channel, replacing the parent error.

Example (Extracting the reason from a tagged error)

import { Data, Effect } from "effect"

class RateLimitError extends Data.TaggedError("RateLimitError")<{
  retryAfter: number
}> {}

class QuotaExceededError extends Data.TaggedError("QuotaExceededError")<{
  limit: number
}> {}

class AiError extends Data.TaggedError("AiError")<{
  reason: RateLimitError | QuotaExceededError
}> {}

declare const program: Effect.Effect<string, AiError>

// Before: Effect<string, AiError>
// After:  Effect<string, RateLimitError | QuotaExceededError>
const unwrapped = program.pipe(Effect.unwrapReason("AiError"))
error handling
Source effect/Effect.ts:314217 lines
export const unwrapReason: {
  <
    K extends TagsWithReason<E>,
    E
  >(
    errorTag: K
  ): <A, R>(self: Effect<A, E, R>) => Effect<A, ExcludeTag<E, K> | ReasonOf<ExtractTag<E, K>>, R>
  <
    A,
    E,
    R,
    K extends TagsWithReason<E>
  >(
    self: Effect<A, E, R>,
    errorTag: K
  ): Effect<A, ExcludeTag<E, K> | ReasonOf<ExtractTag<E, K>>, R>
} = internal.unwrapReason