import { concreteTArray } from "@effect/core/stm/TArray/operations/_internal/InternalTArray" /** * Atomically reduce the array, if non-empty, by a binary operator. * * @tsplus static effect/core/stm/TArray.Aspects reduceMaybe * @tsplus pipeable effect/core/stm/TArray reduceMaybe */ export function reduceMaybe(f: (x: A, y: A) => A) { return (self: TArray): STM> => STM.Effect((journal) => { let i = 0 let result: A | undefined = undefined concreteTArray(self) while (i < self.chunk.length) { const a = self.chunk.unsafeGet(i)!.unsafeGet(journal) result = result == null ? a : f(a, result) i = i + 1 } return Maybe.fromNullable(result) }) }