An educational pure functional programming library in TypeScript
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add prelude/compose module with pipe, flow, id, constant

+73
+72
src/prelude/compose.ts
··· 1 + // Pure composition utilities for purus-ts prelude layer 2 + 3 + // Identity function 4 + export const id = <A>(a: A): A => a 5 + 6 + // Constant function 7 + export const constant = <A>(a: A) => (): A => a 8 + 9 + // Flip curried function arguments 10 + export const flip = <A, B, C>(f: (a: A) => (b: B) => C) => 11 + (b: B) => 12 + (a: A): C => 13 + f(a)(b) 14 + 15 + // Side effect tap 16 + export const tap = <A>(f: (a: A) => void) => 17 + (a: A): A => { 18 + f(a) 19 + return a 20 + } 21 + 22 + // pipe overloads (at least 6 overloads for type inference) 23 + export function pipe<A>(a: A): A 24 + export function pipe<A, B>(a: A, ab: (a: A) => B): B 25 + export function pipe<A, B, C>(a: A, ab: (a: A) => B, bc: (b: B) => C): C 26 + export function pipe<A, B, C, D>( 27 + a: A, 28 + ab: (a: A) => B, 29 + bc: (b: B) => C, 30 + cd: (c: C) => D 31 + ): D 32 + export function pipe<A, B, C, D, E>( 33 + a: A, 34 + ab: (a: A) => B, 35 + bc: (b: B) => C, 36 + cd: (c: C) => D, 37 + de: (d: D) => E 38 + ): E 39 + export function pipe<A, B, C, D, E, F>( 40 + a: A, 41 + ab: (a: A) => B, 42 + bc: (b: B) => C, 43 + cd: (c: C) => D, 44 + de: (d: D) => E, 45 + ef: (e: E) => F 46 + ): F 47 + export function pipe( 48 + a: unknown, 49 + ...fns: Array<(x: unknown) => unknown> 50 + ): unknown { 51 + return fns.reduce((acc, fn) => fn(acc), a) 52 + } 53 + 54 + // flow overloads (at least 4) 55 + export function flow<A, B>(ab: (a: A) => B): (a: A) => B 56 + export function flow<A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => C 57 + export function flow<A, B, C, D>( 58 + ab: (a: A) => B, 59 + bc: (b: B) => C, 60 + cd: (c: C) => D 61 + ): (a: A) => D 62 + export function flow<A, B, C, D, E>( 63 + ab: (a: A) => B, 64 + bc: (b: B) => C, 65 + cd: (c: C) => D, 66 + de: (d: D) => E 67 + ): (a: A) => E 68 + export function flow( 69 + ...fns: Array<(x: unknown) => unknown> 70 + ): (a: unknown) => unknown { 71 + return (a: unknown) => fns.reduce((acc, fn) => fn(acc), a) 72 + }
+1
src/prelude/index.ts
··· 1 + export * from "./compose"