@effect-ts/system
Version:
Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.
34 lines (30 loc) • 855 B
text/typescript
// ets_tracing: off
import type * as CK from "../../../Collections/Immutable/Chunk/index.js"
import type * as T from "../../../Effect/index.js"
import * as CH from "../Channel/index.js"
import * as C from "./core.js"
/**
* A sink that executes the provided effectful function for every chunk fed to it
* until `f` evaluates to `false`.
*/
export function forEachChunkWhile<R, ErrIn, ErrOut, In>(
f: (_in: CK.Chunk<In>) => T.Effect<R, ErrOut, boolean>
): C.Sink<R, ErrIn, In, ErrIn | ErrOut, unknown, void> {
const reader: CH.Channel<
R,
ErrIn,
CK.Chunk<In>,
unknown,
ErrIn | ErrOut,
never,
void
> = CH.readWith(
(_in) =>
CH.chain_(CH.fromEffect(f(_in)), (continue_) =>
continue_ ? reader : CH.end(undefined)
),
(err) => CH.fail(err),
(_) => CH.unit
)
return new C.Sink(reader)
}