···11+// Pure composition utilities for purus-ts prelude layer
22+33+// Identity function
44+export const id = <A>(a: A): A => a
55+66+// Constant function
77+export const constant = <A>(a: A) => (): A => a
88+99+// Flip curried function arguments
1010+export const flip = <A, B, C>(f: (a: A) => (b: B) => C) =>
1111+ (b: B) =>
1212+ (a: A): C =>
1313+ f(a)(b)
1414+1515+// Side effect tap
1616+export const tap = <A>(f: (a: A) => void) =>
1717+ (a: A): A => {
1818+ f(a)
1919+ return a
2020+ }
2121+2222+// pipe overloads (at least 6 overloads for type inference)
2323+export function pipe<A>(a: A): A
2424+export function pipe<A, B>(a: A, ab: (a: A) => B): B
2525+export function pipe<A, B, C>(a: A, ab: (a: A) => B, bc: (b: B) => C): C
2626+export function pipe<A, B, C, D>(
2727+ a: A,
2828+ ab: (a: A) => B,
2929+ bc: (b: B) => C,
3030+ cd: (c: C) => D
3131+): D
3232+export function pipe<A, B, C, D, E>(
3333+ a: A,
3434+ ab: (a: A) => B,
3535+ bc: (b: B) => C,
3636+ cd: (c: C) => D,
3737+ de: (d: D) => E
3838+): E
3939+export function pipe<A, B, C, D, E, F>(
4040+ a: A,
4141+ ab: (a: A) => B,
4242+ bc: (b: B) => C,
4343+ cd: (c: C) => D,
4444+ de: (d: D) => E,
4545+ ef: (e: E) => F
4646+): F
4747+export function pipe(
4848+ a: unknown,
4949+ ...fns: Array<(x: unknown) => unknown>
5050+): unknown {
5151+ return fns.reduce((acc, fn) => fn(acc), a)
5252+}
5353+5454+// flow overloads (at least 4)
5555+export function flow<A, B>(ab: (a: A) => B): (a: A) => B
5656+export function flow<A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => C
5757+export function flow<A, B, C, D>(
5858+ ab: (a: A) => B,
5959+ bc: (b: B) => C,
6060+ cd: (c: C) => D
6161+): (a: A) => D
6262+export function flow<A, B, C, D, E>(
6363+ ab: (a: A) => B,
6464+ bc: (b: B) => C,
6565+ cd: (c: C) => D,
6666+ de: (d: D) => E
6767+): (a: A) => E
6868+export function flow(
6969+ ...fns: Array<(x: unknown) => unknown>
7070+): (a: unknown) => unknown {
7171+ return (a: unknown) => fns.reduce((acc, fn) => fn(acc), a)
7272+}