Hyperlinkv0.8.0-beta.28

TxHashMap

TxHashMap.forEachconsteffect/TxHashMap.ts:1918
<V, K, R, E>(f: (value: V, key: K) => Effect.Effect<void, E, R>): (
  self: TxHashMap<K, V>
) => Effect.Effect<void, E, R>
<K, V, R, E>(
  self: TxHashMap<K, V>,
  f: (value: V, key: K) => Effect.Effect<void, E, R>
): Effect.Effect<void, E, R>

Executes a side-effect function for each entry in the TxHashMap. The function receives the value and key as parameters and can perform effects.

Example (Running effects for each entry)

import { Console, Effect, TxHashMap } from "effect"

const program = Effect.gen(function*() {
  // Create a log processing map
  const logs = yield* TxHashMap.make(
    ["error.log", { size: 1024, level: "error" }],
    ["access.log", { size: 2048, level: "info" }],
    ["debug.log", { size: 512, level: "debug" }]
  )

  // Process each log file with side effects
  yield* TxHashMap.forEach(logs, (logInfo, filename) =>
    Effect.gen(function*() {
      yield* Console.log(
        `Processing ${filename}: ${logInfo.size} bytes, level: ${logInfo.level}`
      )
      if (logInfo.level === "error") {
        yield* Console.log(`⚠️  Error log detected: ${filename}`)
      }
    }))

  // Data-last usage with pipe
  yield* logs.pipe(
    TxHashMap.forEach((logInfo) =>
      logInfo.size > 1000
        ? Console.log(`Large log file: ${logInfo.size} bytes`)
        : Effect.void
    )
  )
})
combinators
export const forEach: {
  <V, K, R, E>(
    f: (value: V, key: K) => Effect.Effect<void, E, R>
  ): (self: TxHashMap<K, V>) => Effect.Effect<void, E, R>
  <K, V, R, E>(
    self: TxHashMap<K, V>,
    f: (value: V, key: K) => Effect.Effect<void, E, R>
  ): Effect.Effect<void, E, R>
} = dual(
  2,
  <K, V, R, E>(
    self: TxHashMap<K, V>,
    f: (value: V, key: K) => Effect.Effect<void, E, R>
  ): Effect.Effect<void, E, R> =>
    Effect.gen(function*() {
      const currentMap = yield* TxRef.get(self.ref)
      const entries = HashMap.toEntries(currentMap)
      yield* Effect.forEach(entries, ([key, value]) => f(value, key))
    })
)