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-freeEither-like sum type with successAand failureE.- This module focuses on small bridges: collapse a missing-element failure into an
Option, flatten nestedResult’s, and lift intoEffect.
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
NoSuchElementErrorfailure becomesResult.succeed(Option.none()). - Any other failure is preserved as-is.
- A success of
AbecomesResult.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>>