Skip to main content Link Search Menu Expand Document (external link)

Result overview

Extension to the Effect Result module providing optional-error recovery, flattening, and lifting into Effect.

Mental model

  • Result.Result<A, E> is a synchronous, retry-free Either-like sum type with success A and failure E.
  • This module focuses on small bridges: collapse a missing-element failure into an Option, flatten nested Result’s, and lift into Effect.

Common tasks

  • Handle missing elements: {@link optionFromOptional}
  • Collapse nesting: {@link flatten}

Quickstart

Example (Collapse a NoSuchElementError into an Option)

import { Cause, Result } from "effect"
import * as MResult from "@parischap/effect-lib/MResult"

console.log(MResult.optionFromOptional(Result.succeed(1))) // Success(Some(1))
console.log(MResult.optionFromOptional(Result.fail(new Cause.NoSuchElementError())))
// Success(None)

Table of contents


Models

Type (type alias)

Type on which this module’s functions operate.

Signature

export type Type<A, E = never> = Result.Result<A, E>

Utils

flatten

Flattens a nested Result<Result<R, L1>, L2> into Result<R, L1 | L2>.

Signature

export declare const flatten: <R, L1, L2>(self: Type<Type<R, L1>, L2>) => Type<R, L1 | L2>

optionFromOptional

Converts a Result<A, E> whose failure channel may include NoSuchElementError into a Result<Option<A>, Exclude<E, NoSuchElementError>>.

  • A NoSuchElementError failure becomes Result.succeed(Option.none()).
  • Any other failure is preserved as-is.
  • A success of A becomes Result.succeed(Option.some(a)).

Example (Distinguishing absence from real failures)

import { Cause, Result } from "effect"
import * as MResult from "@parischap/effect-lib/MResult"

console.log(MResult.optionFromOptional(Result.succeed(1))) // Success(Some(1))
console.log(MResult.optionFromOptional(Result.fail(new Cause.NoSuchElementError())))
// Success(None)
console.log(MResult.optionFromOptional(Result.fail("boom"))) // Failure('boom')

Signature

export declare const optionFromOptional: <A, E>(
  self: Type<A, E>
) => Type<Option.Option<A>, Exclude<E, Cause.NoSuchElementError>>