import { concreteTArray } from "@effect/core/stm/TArray/operations/_internal/InternalTArray" /** * Atomically folds using a pure function. * * @tsplus static effect/core/stm/TArray.Aspects reduce * @tsplus pipeable effect/core/stm/TArray reduce */ export function reduce(zero: Z, f: (z: Z, a: A) => Z) { return (self: TArray): STM => STM.Effect((journal) => { let result = zero let i = 0 concreteTArray(self) while (i < self.chunk.length) { const value = self.chunk.unsafeGet(i)!.unsafeGet(journal) result = f(result, value) i = i + 1 } return result }) }