@effect-ts/system
Version:
Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.
31 lines (27 loc) • 794 B
text/typescript
// ets_tracing: off
import * as CK from "../../../Collections/Immutable/Chunk/index.js"
import { pipe } from "../../../Function/index.js"
import * as CH from "../Channel/index.js"
import * as Chain from "./chain.js"
import * as C from "./core.js"
import * as FoldChunks from "./foldChunks.js"
/*
* A sink that takes the specified number of values.
*/
export function take<Err, In>(
n: number
): C.Sink<unknown, Err, In, Err, In, CK.Chunk<In>> {
return pipe(
FoldChunks.foldChunks<Err, In, CK.Chunk<In>>(
CK.empty(),
(_) => CK.size(_) < n,
(a, b) => CK.concat_(a, b)
),
Chain.chain((acc) => {
const {
tuple: [taken, leftover]
} = CK.splitAt_(acc, n)
return new C.Sink(CH.zipRight_(CH.write(leftover), CH.end(taken)))
})
)
}