// 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;