Hyperlinkv0.8.0-beta.28

Record

Record.reduceconsteffect/Record.ts:1157
<Z, V, K extends string>(
  zero: Z,
  f: (accumulator: Z, value: V, key: K) => Z
): (self: ReadonlyRecord<K, V>) => Z
<K extends string, V, Z>(
  self: ReadonlyRecord<K, V>,
  zero: Z,
  f: (accumulator: Z, value: V, key: K) => Z
): Z

Reduces a record to a single value by combining its entries with a specified function.

Example (Reducing record values)

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

assert.deepStrictEqual(
  Record.reduce({ a: 1, b: 2, c: 3 }, 0, (acc, value, key) => acc + value),
  6
)
folding
Source effect/Record.ts:115720 lines
export const reduce: {
  <Z, V, K extends string>(
    zero: Z,
    f: (accumulator: Z, value: V, key: K) => Z
  ): (self: ReadonlyRecord<K, V>) => Z
  <K extends string, V, Z>(self: ReadonlyRecord<K, V>, zero: Z, f: (accumulator: Z, value: V, key: K) => Z): Z
} = dual(
  3,
  <K extends string, V, Z>(
    self: ReadonlyRecord<K, V>,
    zero: Z,
    f: (accumulator: Z, value: V, key: K) => Z
  ): Z => {
    let out: Z = zero
    for (const key of keys(self)) {
      out = f(out, self[key], key)
    }
    return out
  }
)