type Function1 = (a: A) => R type Function2 = (a: A, b: B) => R type Function3 = (a: A, b: B, c: C) => R type Predicate1 = Function1 type Predicate2 = Function2 type Predicate3 = Function3 export function add(a: number): (b: number) => number export function add(a: number, b: number): number export function all(p: Predicate1, as: A[]): boolean export function all(p: Predicate1): (as: A[]) => boolean export function always(a: A): () => A export function and(a: boolean): (b: boolean) => boolean export function and(a: boolean, b: boolean): boolean export function any(p: Predicate1): (as: A[]) => boolean export function any(p: Predicate1, as: A[]): boolean export function append(a: string): (as: string) => string export function append(a: string, as: string): string export function append(a: A): (as: A[]) => A[] export function append(a: A, as: A[]): A[] export function apply(f: Function1): (a: A) => R export function apply(f: Function1, a: A): R export function apply2(f: Function2): (a: A) => (b: B) => R export function apply2(f: Function2, a: A, b: B): R export function apply3(f: Function3): (a: A) => (b: B) => (c: C) => R export function apply3(f: Function3, a: A, b: B, c: C): R export function applyMethod(k: K): (a: any) => (o: T) => T export function applyMethod(k: K, a: any, o: T): T export function applyMethod2(k: K): (a: any) => (b: any) => (o: T) => T export function applyMethod2(k: K, a: any, b: any, o: T): T export function applyMethod3(k: K): (a: any) => (b: any) => (c: any) => (o: T) => T export function applyMethod3(k: K, a: any, b: any, c: any, o: T): T export function applyRight(a: A): (f: Function1) => R export function applyRight(a: A, f: Function1): R export function array(n: number): A[] export function between(a: number): (b: number) => (n: number) => boolean export function between(a: number, b: number, n: number): boolean export function branch(p: Predicate1): (f: (a: A) => B) => (g: (a: A) => B) => (a: A) => B export function branch(p: Predicate1, f: (a: A) => B, g: (a: A) => B, a: A): B export function cartesian(as: string): (bs: string) => [string] export function cartesian(as: string, bs: string): [string] export function cartesian(as: A[]): (bs: B[]) => [[A, B]] export function cartesian(as: A[], bs: B[]): [[A, B]] export function chunk(as: string): [string] export function chunk(as: A[]): [[A]] export function chunkBy(p: Predicate2): (as: string) => string export function chunkBy(p: Predicate2, as: string): string export function chunkBy(p: Predicate2): (as: A[]) => A[] export function chunkBy(p: Predicate2, as: A[]): A[] export function dec(a: number): number export function difference(as: string): (bs: string) => string export function difference(as: string, bs: string): string export function difference(as: A[]): (bs: A[]) => [A] export function difference(as: A[], bs: A[]): [A] export function differenceBy(p: Predicate2): (as: string) => (bs: string) => string export function differenceBy(p: Predicate2, as: string, bs: string): string export function differenceBy(p: Predicate2): (as: A[]) => (bs: A[]) => [A] export function differenceBy(p: Predicate2, as: A[], bs: A[]): [A] export function div(a: number): (b: number) => number export function div(a: number, b: number): number export function drop(n: number): (as: string) => string export function drop(n: number, as: string): string export function drop(n: number): (as: A[]) => A[] export function drop(n: number, as: A[]): A[] export function dropWhile(p: Predicate1): (as: string) => string export function dropWhile(p: Predicate1, as: string): string export function dropWhile(p: Predicate1): (as: A[]) => A[] export function dropWhile(p: Predicate1, as: A[]): A[] export function elem(a: string): (as: string) => boolean export function elem(a: string, as: string): boolean export function elem(a: A): (as: A[]) => boolean export function elem(a: A, as: A[]): boolean export function elemIndex(a: string): (as: string) => number export function elemIndex(a: string, as: string): number export function elemIndex(a: A): (as: A[]) => number export function elemIndex(a: A, as: A[]): number export function elemIndices(a: string): (as: string) => number[] export function elemIndices(a: string, as: string): number[] export function elemIndices(a: A): (as: A[]) => number[] export function elemIndices(a: A, as: A[]): number[] export function empty(a: A[]): boolean export function empty(a: string): boolean export function endsWith(as: string): (bs: string) => boolean export function endsWith(as: string, bs: string): boolean export function endsWith(as: A[]): (bs: A[]) => boolean export function endsWith(as: A[], bs: A[]): boolean export function eq(a: A): (b: A) => boolean export function eq(a: A, b: A): boolean export function eqBy(f: Function1): (a: A) => (b: A) => boolean export function eqBy(f: Function1, a: A, b: A): boolean export function even(a: number): boolean export function filter(p: Predicate1): (as: string) => string export function filter(p: Predicate1, as: string): string export function filter(p: Predicate1): (as: A[]) => A[] export function filter(p: Predicate1, as: A[]): A[] export function find(p: Predicate1): (as: string) => string export function find(p: Predicate1, as: string): string export function find(p: Predicate1): (as: A[]) => A export function find(p: Predicate1, as: A[]): A export function findIndex(p: Predicate1): (as: string) => number export function findIndex(p: Predicate1, as: string): number export function findIndex(p: Predicate1): (as: A[]) => number export function findIndex(p: Predicate1, as: A[]): number export function findIndices(p: Predicate1): (as: string) => number[] export function findIndices(p: Predicate1, as: string): number[] export function findIndices(p: Predicate1): (as: A[]) => number[] export function findIndices(p: Predicate1, as: A[]): number[] export function flip(f: Function2): Function2 export function fold(f: Function2): (init: B) => (as: string) => B[] export function fold(f: Function2, init: B, as: string): B[] export function fold(f: Function2): (init: B) => (as: A[]) => B[] export function fold(f: Function2, init: B, as: A[]): B[] export function foldRight(f: Function2): (init: B) => (as: string) => B[] export function foldRight(f: Function2, init: B, as: string): B[] export function foldRight(f: Function2): (init: B) => (as: A[]) => B[] export function foldRight(f: Function2, init: B, as: A[]): B[] export function get(k: K): (o: T) => any export function get(k: K, o: T): any export function gt(a: number): (b: number) => boolean export function gt(a: number, b: number): boolean export function gte(a: number): (b: number) => boolean export function gte(a: number, b: number): boolean export function groupBy(key: K, as: A[]): { [k: string]: [A] } export function groupBy(f: Function1, as: A[]): { [k: string]: [A] } export function has(k: K): (o: T) => boolean export function has(k: K, o: T): boolean export function head(a: A[]): A export function head(a: string): string export function id(a: A): A export function inc(a: number): number export function init(a: string): string export function init(a: A[]): A export function inits(as: string): [string] export function inits(as: A[]): [[A]] export function intersect(as: string): (bs: string) => string export function intersect(as: string, bs: string): string export function intersect(as: A[]): (bs: A[]) => [A] export function intersect(as: A[], bs: A[]): [A] export function intersectBy(p: Predicate2): (as: string) => (bs: string) => string export function intersectBy(p: Predicate2, as: string, bs: string): string export function intersectBy(p: Predicate2): (as: A[]) => (bs: A[]) => [A] export function intersectBy(p: Predicate2, as: A[], bs: A[]): [A] export function intersperse(a: string): (as: string) => string export function intersperse(a: string, as: string): string export function intersperse(a: A): (as: A[]) => A[] export function intersperse(a: A, as: A[]): A[] export function isInfixOf(as: string): (bs: string) => boolean export function isInfixOf(as: string, bs: string): boolean export function isInfixOf(as: A[]): (bs: A[]) => boolean export function isInfixOf(as: A[], bs: A[]): boolean export function isPrefixOf(as: string): (bs: string) => boolean export function isPrefixOf(as: string, bs: string): boolean export function isPrefixOf(as: A[]): (bs: A[]) => boolean export function isPrefixOf(as: A[], bs: A[]): boolean export function isSuffixOf(as: string): (bs: string) => boolean export function isSuffixOf(as: string, bs: string): boolean export function isSuffixOf(as: A[]): (bs: A[]) => boolean export function isSuffixOf(as: A[], bs: A[]): boolean export function keys(o: { [k: string]: any }): string[] export function last(a: string): string export function last(a: A[]): A export function length(a: string): number export function length(a: any[]): number export function lt(a: number): (b: number) => boolean export function lt(a: number, b: number): boolean export function lte(a: number): (b: number) => boolean export function lte(a: number, b: number): boolean export function map(f: Function1): (as: string) => B[] export function map(f: Function1, as: string): B[] export function map(f: Function1): (as: A[]) => B[] export function map(f: Function1, as: A[]): B[] export function max(a: number): (b: number) => number export function max(a: number, b: number): number export function maximum(as: string): string export function maximum(as: number[]): number export function maximumBy(c: Function2): (as: string) => string export function maximumBy(c: Function2, as: string): string export function maximumBy(c: Function2): (as: A[]) => A[] export function maximumBy(c: Function2, as: A[]): A[] export function min(a: number): (b: number) => number export function min(a: number, b: number): number export function minimum(as: string): string export function minimum(as: number[]): number export function minimumBy(c: Function2): (as: string) => string export function minimumBy(c: Function2, as: string): string export function minimumBy(c: Function2): (as: A[]) => A[] export function minimumBy(c: Function2, as: A[]): A[] export function mod(a: number): (b: number) => number export function mod(a: number, b: number): number export function mul(a: number): (b: number) => number export function mul(a: number, b: number): number export function negate(a: number): number export function neq(a: A): (b: A) => boolean export function neq(a: A, b: A): boolean export function not(a: boolean): boolean export function nub(as: string): string[] export function nub(as: A[]): A[] export function nubBy(p: Predicate1): (as: string) => string[] export function nubBy(p: Predicate1, as: string): string[] export function nubBy(p: Predicate1): (as: A[]) => A[] export function nubBy(p: Predicate1, as: A[]): A[] export function odd(a: number): boolean export function omit(k: K[]): (o: T) => Partial export function omit(k: K[], o: T): Partial export function or(a: boolean): (b: boolean) => boolean export function or(a: boolean, b: boolean): boolean export function pair(a: A): (b: B) => [A, B] export function pair(a: A, b: B): [A, B] export function pairs(o: { [k: string]: A }): [string, A][] export function partition(p: Predicate1): (as: string) => [string] export function partition(p: Predicate1, as: string): [string] export function partition(p: Predicate1): (as: A[]) => [[A]] export function partition(p: Predicate1, as: A[]): [[A]] export function permutations(as: string): [string] export function permutations(as: A[]): [[A]] export function pick(ks: K[], o: T): T export function pick(ks: K[]): (o: T) => T export function pipe(f0: Function1): (a: A) => B export function pipe(f0: Function1, f1: Function1): (a: A) => C export function pipe(f0: Function1, f1: Function1, f2: Function1): (a: A) => D export function pipe(f0: Function1, f1: Function1, f2: Function1, f3: Function1): (a: A) => E export function pipe(f0: Function1, f1: Function1, f2: Function1, f3: Function1, f4: Function1): (a: A) => F export function pipe(f0: Function1, f1: Function1, f2: Function1, f3: Function1, f4: Function1, f5: Function1): (a: A) => G export function pipe(f0: Function1, f1: Function1, f2: Function1, f3: Function1, f4: Function1, f5: Function1, f6: Function1): (a: A) => H export function pipe(f0: Function1, f1: Function1, f2: Function1, f3: Function1, f4: Function1, f5: Function1, f6: Function1, f7: Function1): (a: A) => I export function pipe(f0: Function1, f1: Function1, f2: Function1, f3: Function1, f4: Function1, f5: Function1, f6: Function1, f7: Function1, f8: Function1): (a: A) => J export function prepend(a: string): (as: string) => string export function prepend(a: string, as: string): string export function prepend(a: A): (as: A[]) => A[] export function prepend(a: A, as: A[]): A[] export function product(as: number[]): number export function randomFloat(): number export function randomInt(): number export function range(a: number): (b: number) => number[] export function range(a: number, b: number): number[] export function remove(a: string): (as: string) => string export function remove(a: string, as: string): string export function remove(a: A): (as: A[]) => A[] export function remove(a: A, as: A[]): A[] export function removeBy(p: Predicate2): (a: A) => (as: string) => string export function removeBy(p: Predicate2, a: A, as: string): string export function removeBy(p: Predicate2): (a: A) => (as: A[]) => A[] export function removeBy(p: Predicate2, a: A, as: A[]): A[] export function replace(a: string): (b: string) => (as: string) => string export function replace(a: string, b: string, as: string): string export function replace(a: RegExp): (b: string) => (as: string) => string export function replace(a: RegExp, b: string, as: string): string export function replicate(n: number): (a: string) => string export function replicate(n: number, a: string): string export function replicate(n: number): (a: A) => A[] export function replicate(n: number, a: A): A[] export function reverse(a: string): string export function reverse(a: A): A[] export function sample(n: number): (as: string) => string export function sample(n: number, as: string): string export function sample(n: number): (as: A[]) => A[] export function sample(n: number, as: A[]): A[] export function scan(f: Function2): (init: B) => (as: string) => B[] export function scan(f: Function2, init: B, as: string): B[] export function scan(f: Function2): (init: B) => (as: A[]) => B[] export function scan(f: Function2, init: B, as: A[]): B[] export function scanRight(f: Function2): (init: B) => (as: string) => B[] export function scanRight(f: Function2, init: B, as: string): B[] export function scanRight(f: Function2): (init: B) => (as: A[]) => B[] export function scanRight(f: Function2, init: B, as: A[]): B[] export function set(k: K): (a: any) => (o: T) => T export function set(k: K, a: any, o: T): T export function shuffle(as: string): string export function shuffle(as: A[]): A[] export function sort(as: string): string export function sort(as: A[]): A[] export function sortBy(c: Function2): (as: string) => string export function sortBy(c: Function2, as: string): string export function sortBy(c: Function2): (as: A[]) => A[] export function sortBy(c: Function2, as: A[]): A[] export function span(p: Predicate1): (as: string) => string export function span(p: Predicate1, as: string): string export function span(p: Predicate1): (as: A[]) => A[] export function span(p: Predicate1, as: A[]): A[] export function splitAt(n: number): (as: string) => string export function splitAt(n: number, as: string): string export function splitAt(n: number): (as: A[]) => A[] export function splitAt(n: number, as: A[]): A[] export function startsWith(as: string): (bs: string) => boolean export function startsWith(as: string, bs: string): boolean export function startsWith(as: A[]): (bs: A[]) => boolean export function startsWith(as: A[], bs: A[]): boolean export function sub(a: number): (b: number) => number export function sub(a: number, b: number): number export function subsequences(as: string): [string] export function subsequences(as: A[]): [[A]] export function sum(as: number[]): number export function surround(a: string): (b: string) => (as: string) => string export function surround(a: string, b: string, as: string): string export function surround(a: A): (b: A) => (as: A[]) => A[] export function surround(a: A, b: A, as: A[]): A[] export function tail(a: string): string export function tail(a: A[]): A export function tails(as: string): [string] export function tails(as: A[]): [[A]] export function take(n: number): (as: string) => string export function take(n: number, as: string): string export function take(n: number): (as: A[]) => A[] export function take(n: number, as: A[]): A[] export function takeWhile(p: Predicate1): (as: string) => string export function takeWhile(p: Predicate1, as: string): string export function takeWhile(p: Predicate1): (as: A[]) => A[] export function takeWhile(p: Predicate1, as: A[]): A[] export function tap(f: Function1): (a: A) => A export function tap(f: Function1, a: A): A export function toLower(s: string): string export function toUpper(s: string): string export function union(as: string): (bs: string) => string export function union(as: string, bs: string): string export function union(as: A[]): (bs: A[]) => [A] export function union(as: A[], bs: A[]): [A] export function unionBy(p: Predicate2): (as: string) => (bs: string) => string export function unionBy(p: Predicate2, as: string, bs: string): string export function unionBy(p: Predicate2): (as: A[]) => (bs: A[]) => [A] export function unionBy(p: Predicate2, as: A[], bs: A[]): [A] export function update(k: K): (f: Function1) => (o: T) => T export function update(k: K, f: Function1, o: T): T export function values(o: { [k: string]: A }): A[] export function whereAll(ps: Predicate1[]): (a: A) => boolean export function whereAll(ps: Predicate1[], a: A): boolean export function whereAny(ps: Predicate1[]): (a: A) => boolean export function whereAny(ps: Predicate1[], a: A): boolean export function zip(a: string): (b: string) => string export function zip(a: string, b: string): string export function zip(a: A[]): (b: B[]) => [A, B][] export function zip(a: A[], b: B[]): [A, B][] export function zipWith(f: Function2): (a: string) => (b: string) => R[] export function zipWith(f: Function2, a: string, b: string): R[] export function zipWith(f: Function2): (a: A[]) => (b: B[]) => R[] export function zipWith(f: Function2, a: A[], b: B[]): R[]