Hyperlinkv0.8.0-beta.28

Result

Result.transposeMapOptionconsteffect/Result.ts:1832
<A, B, E = never>(f: (self: A) => Result<B, E>): (
  self: Option<A>
) => Result<Option<B>, E>
<A, B, E = never>(self: Option<A>, f: (self: A) => Result<B, E>): Result<
  Option<B>,
  E
>

Maps an Option value with a Result-producing function, then transposes the structure from Option<Result<B, E>> to Result<Option<B>, E>.

When to use

Use when an optional value should be validated only when present, preserving absence as a successful None.

Details

  • None becomes Success(None) (the function is never called)
  • Some(a) where f(a) is Success(b) becomes Success(Some(b))
  • Some(a) where f(a) is Failure(e) becomes Failure(e)

Example (Mapping and transposing in one step)

import { Option, Result } from "effect"

const parse = (s: string) =>
  isNaN(Number(s))
    ? Result.fail("not a number" as const)
    : Result.succeed(Number(s))

console.log(Result.transposeMapOption(Option.some("42"), parse))
// Output: { _tag: "Success", success: { _tag: "Some", value: 42 }, ... }

console.log(Result.transposeMapOption(Option.none(), parse))
// Output: { _tag: "Success", success: { _tag: "None" }, ... }
TransposingtransposeOption
Source effect/Result.ts:18329 lines
export const transposeMapOption = dual<
  <A, B, E = never>(
    f: (self: A) => Result<B, E>
  ) => (self: Option<A>) => Result<Option<B>, E>,
  <A, B, E = never>(
    self: Option<A>,
    f: (self: A) => Result<B, E>
  ) => Result<Option<B>, E>
>(2, (self, f) => option_.isNone(self) ? succeedNone : map(f(self.value), option_.some))