import { IterableActivity, Source, isSource } from "./activity"; export type EachCallback = (value: T, index: number) => void; function eachGen(callbackFn: EachCallback): IterableActivity { return function* (source: Source) { let i = -1; for (const item of source) { callbackFn(item, ++i); yield item; } }; } export function each(callbackFn: EachCallback): IterableActivity; export function each(source: Source, callbackFn: EachCallback): IterableIterator; export function each(s_or_cb: Source | EachCallback, callbackFn?: EachCallback): IterableActivity | IterableIterator { return isSource(s_or_cb) ? eachGen(callbackFn!)(s_or_cb) : eachGen(s_or_cb); }