Hyperlinkv0.8.0-beta.28

Record

Record.partitionconsteffect/Record.ts:936
<K extends string, A, B, C>(f: (input: A, key: K) => Result<C, B>): (
  self: ReadonlyRecord<K, A>
) => [
  left: Record<ReadonlyRecord.NonLiteralKey<K>, B>,
  right: Record<ReadonlyRecord.NonLiteralKey<K>, C>
]
<K extends string, A, B, C>(
  self: ReadonlyRecord<K, A>,
  f: (input: A, key: K) => Result<C, B>
): [
  left: Record<ReadonlyRecord.NonLiteralKey<K>, B>,
  right: Record<ReadonlyRecord.NonLiteralKey<K>, C>
]

Applies a function to each record entry and partitions the returned Result values into two records.

Details

Failure values are collected in the left record, and success values are collected in the right record, preserving the original keys.

Example (Partitioning with Result)

import { Record, Result } from "effect"
import * as assert from "node:assert"

const x = { a: 1, b: 2, c: 3 }
const f = (n: number) => (n % 2 === 0 ? Result.succeed(n) : Result.fail(n))
assert.deepStrictEqual(Record.partition(x, f), [{ a: 1, c: 3 }, { b: 2 }])
filtering
Source effect/Record.ts:93629 lines
export const partition: {
  <K extends string, A, B, C>(
    f: (input: A, key: K) => Result<C, B>
  ): (
    self: ReadonlyRecord<K, A>
  ) => [left: Record<ReadonlyRecord.NonLiteralKey<K>, B>, right: Record<ReadonlyRecord.NonLiteralKey<K>, C>]
  <K extends string, A, B, C>(
    self: ReadonlyRecord<K, A>,
    f: (input: A, key: K) => Result<C, B>
  ): [left: Record<ReadonlyRecord.NonLiteralKey<K>, B>, right: Record<ReadonlyRecord.NonLiteralKey<K>, C>]
} = dual(
  2,
  <K extends string, A, B, C>(
    self: ReadonlyRecord<K, A>,
    f: (input: A, key: K) => Result<C, B>
  ): [left: Record<ReadonlyRecord.NonLiteralKey<K>, B>, right: Record<ReadonlyRecord.NonLiteralKey<K>, C>] => {
    const left: Record<string, B> = empty()
    const right: Record<string, C> = empty()
    for (const key of keys(self)) {
      const e = f(self[key], key)
      if (R.isFailure(e)) {
        left[key] = e.failure
      } else {
        right[key] = e.success
      }
    }
    return [left, right]
  }
)
Referenced by 1 symbols