// array.js export function cons(val: A, arr: A[]): A[]; export function append(val: A, arr: A[]): A[]; export function drop(val: number, arr: A[]): A[]; export function tail(arr: A[]): A[]; export function copy(arr: A[]): A[]; export function map(f: (val: A) => B, arr: A[]): B[]; export function reduce(f: (acc: A, val: B) => A, seed: A, arr: B[]): A export function replace(toReplace: A, i: number, arr: A[]): A[]; export function remove(i: number, arr: A[]): A[]; export function removeAll(f: (val: A) => boolean, arr: A[]): A[]; export function findIndex(item: A, arr: A[]): number; export function isArrayLike(x: any): boolean; // function.js export function id(x: A): A; export function compose(f: (val: B) => C, g: (val: A) => B): (val: A) => C; export function apply(f: (val: A) => B, x: A): B; interface CurriedFunction2 { (): CurriedFunction2; (a: A): (b: B) => C; (a: A, b: B): C; } interface CurriedFunction3 { (): CurriedFunction3; (a: A): CurriedFunction2; (a: A, b: B): (c: C) => D; (a: A, b: B, c: C): D; } interface CurriedFunction4 { (): CurriedFunction4; (a: A): CurriedFunction3; (a: A, b: B): CurriedFunction2; (a: A, b: B, c: C): (d: D) => E; (a: A, b: B, c: C, d: D): E; } export function curry2(f: (a: A, b: B) => C): CurriedFunction2; export function curry3(f: (a: A, b: B, c: C) => D): CurriedFunction3; export function curry4(f: (a: A, b: B, c: C, d: D) => E): CurriedFunction4;