Hyperlinkv0.8.0-beta.28

Exit

Exit.mapBothconsteffect/Exit.ts:915
<E, E2, A, A2>(options: {
  readonly onFailure: (e: E) => E2
  readonly onSuccess: (a: A) => A2
}): (self: Exit<A, E>) => Exit<A2, E2>
<A, E, E2, A2>(
  self: Exit<A, E>,
  options: {
    readonly onFailure: (e: E) => E2
    readonly onSuccess: (a: A) => A2
  }
): Exit<A2, E2>

Transforms both the success value and typed error of an Exit.

When to use

Use when you need to remap both channels in one step.

Details

onSuccess transforms the value if the Exit is a Success. onFailure transforms the typed error if the Exit is a Failure with a Fail reason. Allocates a new Exit.

Gotchas

If the Cause contains only defects or interruptions, the failure passes through unchanged.

Example (Mapping both channels)

import { Data, Exit } from "effect"

class ExitError extends Data.TaggedError("ExitError")<{ readonly input: string }> {}

const exit = Exit.succeed(42)
const mapped = Exit.mapBoth(exit, {
  onSuccess: (x) => String(x),
  onFailure: (e: string) => new ExitError({ input: e })
})
console.log(Exit.isSuccess(mapped) && mapped.value) // "42"
combinatorsmapmapError
Source effect/Exit.ts:9159 lines
export const mapBoth: {
  <E, E2, A, A2>(
    options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
  ): (self: Exit<A, E>) => Exit<A2, E2>
  <A, E, E2, A2>(
    self: Exit<A, E>,
    options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
  ): Exit<A2, E2>
} = effect.exitMapBoth