import { merge } from "./merge"; import { asAsync, Input } from "./async"; export interface ComposeFn { (input: AsyncIterable): AsyncIterable; } export async function *compose, R>(fn: ComposeFn, ...streams: I[]): AsyncIterable { yield *merge(input()); async function *input(): AsyncIterable> { for (const stream of streams) { yield fn(asAsync(stream)); } } }