export type PipeFun = (input: I) => O export class Pipe { static with(input: I) { return new this(input) } #input: I constructor(input: I) { this.#input = input } to(fun: PipeFun) { return new Pipe(fun(this.#input)) } done() { return this.#input } }