export function pipe(a: A, a2b: (a: A) => B): B
export function pipe(a: A, a2b: (a: A) => B, b2c: (b: B) => C): C
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D
): D
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D,
d2e: (d: D) => E
): E
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D,
d2e: (d: D) => E,
e2f: (e: E) => F
): F
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D,
d2e: (d: D) => E,
e2f: (e: E) => F,
f2g: (f: F) => G
): G
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D,
d2e: (d: D) => E,
e2f: (e: E) => F,
f2g: (f: F) => G,
g2h: (g: G) => H
): H
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D,
d2e: (d: D) => E,
e2f: (e: E) => F,
f2g: (f: F) => G,
g2h: (g: G) => H,
h2i: (h: H) => I
): I
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D,
d2e: (d: D) => E,
e2f: (e: E) => F,
f2g: (f: F) => G,
g2h: (g: G) => H,
h2i: (h: H) => I,
i2j: (i: I) => J
): J
export function pipe(
a: A,
a2b: (a: A) => B,
b2c: (b: B) => C,
c2d: (c: C) => D,
d2e: (d: D) => E,
e2f: (e: E) => F,
f2g: (f: F) => G,
g2h: (g: G) => H,
h2i: (h: H) => I,
i2j: (i: I) => J,
j2k: (j: J) => K
): K
export function pipe(x: any, ...fns: any[]): any {
for (let i = 0, n = fns.length; i < n; i++) {
x = fns[i](x)
}
return x
}