@effect-ts/system
Version:
Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.
36 lines (31 loc) • 834 B
text/typescript
// ets_tracing: off
import * as CK from "../../../Collections/Immutable/Chunk/index.js"
import * as T from "../../../Effect/index.js"
import * as CH from "../Channel/index.js"
import * as C from "./core.js"
export function dropWhileEffect<R, InErr, In>(
p: (in_: In) => T.Effect<R, InErr, boolean>
): C.Sink<R, InErr, In, InErr, In, any> {
const loop: CH.Channel<
R,
InErr,
CK.Chunk<In>,
unknown,
InErr,
CK.Chunk<In>,
any
> = CH.readWith(
(in_) =>
CH.unwrap(
T.map_(CK.dropWhileEffect_(in_, p), (leftover) => {
const more = CK.isEmpty(leftover)
return more
? loop
: CH.zipRight_(CH.write(leftover), CH.identity<InErr, CK.Chunk<In>, any>())
})
),
(_) => CH.fail(_),
(_) => CH.unit
)
return new C.Sink(loop)
}