export declare function pipe(value: A): A;
export declare function pipe(value: A, ab: (input: A) => B): B;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C): C;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D): D;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E): E;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E, ef: (input: E) => F): F;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E, ef: (input: E) => F, fg: (input: F) => G): G;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E, ef: (input: E) => F, fg: (input: F) => G, gh: (input: G) => H): H;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E, ef: (input: E) => F, fg: (input: F) => G, gh: (input: G) => H, hi: (input: H) => I): I;
export declare function pipe(value: A, ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E, ef: (input: E) => F, fg: (input: F) => G, gh: (input: G) => H, hi: (input: H) => I, ij: (input: I) => J): J;
/**
* The same composition, without a value - a reusable function.
*
* `pipe` transforms something now; this builds the transformation to apply
* later, which is what makes it usable as a callback:
*
* ```ts
* const normalize = piped(
* (name: string) => name.trim(),
* name => name.toLowerCase(),
* )
*
* names.map(normalize)
* ```
*
* The first step's parameter type is what the resulting function accepts, so it
* has to be annotated - there is nothing else for inference to work from.
*/
export declare function piped(ab: (input: A) => B): (input: A) => B;
export declare function piped(ab: (input: A) => B, bc: (input: B) => C): (input: A) => C;
export declare function piped(ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D): (input: A) => D;
export declare function piped(ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E): (input: A) => E;
export declare function piped(ab: (input: A) => B, bc: (input: B) => C, cd: (input: C) => D, de: (input: D) => E, ef: (input: E) => F): (input: A) => F;
/**
* Run a side effect on a value and hand the value back.
*
* For inspecting a pipeline without breaking it - the step that logs, or
* records a metric, and does not change what flows on:
*
* ```ts
* pipe(
* users,
* list => sortBy(list, u => u.score),
* tap(list => log.debug(`${list.length} users`)),
* list => take(list, 3),
* )
* ```
*
* The effect's return value is discarded on purpose. A step that means to
* change the value should be an ordinary step, where the type says so.
*/
export declare function tap(effect: (value: T) => unknown): (value: T) => T;