Hyperlinkv0.8.0-beta.28

Result

Result.matchconsteffect/Result.ts:905
<E, B, A, C = B>(options: {
  readonly onFailure: (error: E) => B
  readonly onSuccess: (ok: A) => C
}): (self: Result<A, E>) => B | C
<A, E, B, C = B>(
  self: Result<A, E>,
  options: {
    readonly onFailure: (error: E) => B
    readonly onSuccess: (ok: A) => C
  }
): B | C

Folds a Result into a single value by applying one of two functions.

When to use

Use when a Result's success and failure branches should be collapsed into one plain output type.

Details

  • Applies onSuccess if the result is a Success
  • Applies onFailure if the result is a Failure
  • Both branches must return the same type (or a common supertype)

Example (Folding to a string)

import { pipe, Result } from "effect"

const format = Result.match({
  onSuccess: (n: number) => `Got ${n}`,
  onFailure: (e: string) => `Err: ${e}`
})

console.log(format(Result.succeed(42)))
// Output: "Got 42"

console.log(format(Result.fail("timeout")))
// Output: "Err: timeout"
pattern matchingmergegetOrElse
Source effect/Result.ts:90516 lines
export const match: {
  <E, B, A, C = B>(options: {
    readonly onFailure: (error: E) => B
    readonly onSuccess: (ok: A) => C
  }): (self: Result<A, E>) => B | C
  <A, E, B, C = B>(self: Result<A, E>, options: {
    readonly onFailure: (error: E) => B
    readonly onSuccess: (ok: A) => C
  }): B | C
} = dual(
  2,
  <A, E, B, C = B>(self: Result<A, E>, { onFailure, onSuccess }: {
    readonly onFailure: (error: E) => B
    readonly onSuccess: (ok: A) => C
  }): B | C => isFailure(self) ? onFailure(self.failure) : onSuccess(self.success)
)
Referenced by 9 symbols