/** @internal */
export function reduce(b: B, f: (s: B, a: A) => B) {
return function(iterable: Iterable): B {
if (Array.isArray(iterable)) {
return iterable.reduce(f, b)
}
let result = b
for (const n of iterable) {
result = f(result, n)
}
return result
}
}
/** @internal */
export function map(f: (a: A) => B) {
return function(iterable: Iterable): Iterable {
if (Array.isArray(iterable)) {
return iterable.map(f)
}
return (function*() {
for (const n of iterable) {
yield f(n)
}
})()
}
}