// flow-typed signature: dfe9e7dd59fee10f50e3604dd5cab0f8 // flow-typed version: a9e64f6272/ramda_v0.x.x/flow_>=v0.34.x /* eslint-disable no-unused-vars, no-redeclare */ type Transformer = { '@@transducer/step': (r: A, a: *) => R, '@@transducer/init': () => A, '@@transducer/result': (result: *) => B } declare module ramda { declare type UnaryFn = (a: A) => R; declare type BinaryFn = ((a: A, b: B) => R) & ((a:A) => (b: B) => R); declare type UnarySameTypeFn = UnaryFn declare type BinarySameTypeFn = BinaryFn declare type NestedObject = { [k: string]: T | NestedObject } declare type UnaryPredicateFn = (x:T) => boolean declare type BinaryPredicateFn = (x:T, y:T) => boolean declare type BinaryPredicateFn2 = (x:T, y:S) => boolean declare interface ObjPredicate { (value: any, key: string): boolean; } declare type CurriedFunction2 = & ((t1: T1, t2: T2) => R) & ((t1: T1, ...rest: Array) => (t2: T2) => R) declare type CurriedFunction3 = & ((t1: T1, t2: T2, t3: T3) => R) & ((t1: T1, t2: T2, ...rest: Array) => (t3: T3) => R) & ((t1: T1, ...rest: Array) => CurriedFunction2) declare type CurriedFunction4 = & ((t1: T1, t2: T2, t3: T3, t4: T4) => R) & ((t1: T1, t2: T2, t3: T3, ...rest: Array) => (t4: T4) => R) & ((t1: T1, t2: T2, ...rest: Array) => CurriedFunction2) & ((t1: T1, ...rest: Array) => CurriedFunction3) declare type CurriedFunction5 = & ((t1: T1) => CurriedFunction4) & ((t1: T1, t2: T2) => CurriedFunction3) & ((t1: T1, t2: T2, t3: T3) => CurriedFunction2) & ((t1: T1, t2: T2, t3: T3, t4: T4) => (t5: T5) => R) & ((t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R) declare type CurriedFunction6 = & ((t1: T1) => CurriedFunction5) & ((t1: T1, t2: T2) => CurriedFunction4) & ((t1: T1, t2: T2, t3: T3) => CurriedFunction3) & ((t1: T1, t2: T2, t3: T3, t4: T4) => CurriedFunction2) & ((t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => (t6: T6) => R) & ((t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6) => R) declare type Pipe = ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, fg: UnaryFn, ...rest: Array) => UnaryFn) & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, ...rest: Array) => UnaryFn) & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ...rest: Array) => UnaryFn) & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, ...rest: Array) => UnaryFn) & ((ab: UnaryFn, bc: UnaryFn, ...rest: Array) => UnaryFn) & ((ab: UnaryFn, ...rest: Array) => UnaryFn) declare type Compose = & ((fg: UnaryFn, ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) & ((ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) & ((de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) & ((cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) & ((bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) & ((ab: UnaryFn, ...rest: Array) => UnaryFn) declare type Curry = & ((fn: (a: T1, b: T2) => TResult) => CurriedFunction2) & ((fn: (a: T1, b: T2, c: T3) => TResult) => CurriedFunction3) & ((fn: (a: T1, b: T2, c: T3, d: T4) => TResult) => CurriedFunction4) & ((fn: (a: T1, b: T2, c: T3, d: T4, e: T5) => TResult) => CurriedFunction5) & ((fn: (a: T1, b: T2, c: T3, d: T4, e: T5, f: T6) => TResult) => CurriedFunction6) & ((fn: Function) => Function) declare type Filter = & (|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T) => T) & (|{[key:K]:V}>(fn: UnaryPredicateFn) => (xs:T) => T) declare class Monad { chain: Function } declare class Semigroup {} declare class Chain { chain|Array>(fn: (a:T) => V, x: V): V; chain|Array>(fn: (a:T) => V): (x: V) => V; } declare class GenericContructor { constructor(x: T): GenericContructor } declare class GenericContructorMulti { constructor(...args: Array): GenericContructor } /** * DONE: * Function* * List* * Logic * Math * Object* * Relation * String * Type */ declare var compose: Compose; declare var pipe: Pipe; declare var curry: Curry; declare function curryN(length: number, fn: (...args: Array) => any): Function // *Math declare var add: CurriedFunction2; declare var inc: UnaryFn; declare var dec: UnaryFn; declare var mean: UnaryFn,number>; declare var divide: CurriedFunction2 declare var mathMod: CurriedFunction2; declare var median: UnaryFn,number>; declare var modulo: CurriedFunction2; declare var multiply: CurriedFunction2; declare var negate: UnaryFn; declare var product: UnaryFn,number>; declare var subtract: CurriedFunction2; declare var sum: UnaryFn,number>; // Filter declare var filter: Filter; declare var reject: Filter; // *String declare var match: CurriedFunction2>; declare var replace: CurriedFunction3; declare var split: CurriedFunction2> declare var test: CurriedFunction2 declare function toLower(a: string): string; declare function toString(a: any): string; declare function toUpper(a: string): string; declare function trim(a: string): string; // *Type declare function is(t: T, ...rest: Array): (v: any) => boolean; declare function is(t: T, v: any): boolean; declare var propIs: CurriedFunction3; declare function type(x: ?any): string; declare function isArrayLike(x: any): boolean; declare function isNil(x: ?any): boolean; // *List declare function adjust(fn:(a: T) => T, ...rest: Array): (index: number, ...rest: Array) => (src: Array) => Array; declare function adjust(fn:(a: T) => T, index: number, ...rest: Array): (src: Array) => Array; declare function adjust(fn:(a: T) => T, index: number, src: Array): Array; declare function all(fn: UnaryPredicateFn, xs: Array): boolean; declare function all(fn: UnaryPredicateFn, ...rest: Array): (xs: Array) => boolean; declare function any(fn: UnaryPredicateFn, xs: Array): boolean; declare function any(fn: UnaryPredicateFn, ...rest: Array): (xs: Array) => boolean; declare function aperture(n: number, xs: Array): Array>; declare function aperture(n: number, ...rest: Array): (xs: Array) => Array>; declare function append(x: E, xs: Array): Array declare function append(x: E, ...rest: Array): (xs: Array) => Array declare function prepend(x: E, xs: Array): Array declare function prepend(x: E, ...rest: Array): (xs: Array) => Array declare function concat|string>(x: T, y: T): T; declare function concat|string>(x: T): (y: T) => T; declare function contains|string>(x: E, xs: T): boolean declare function contains|string>(x: E, ...rest: Array): (xs: T) => boolean declare function drop|string>(n: number, ...rest: Array):(xs: T) => T; declare function drop|string>(n: number, xs: T): T; declare function dropLast|string>(n: number, ...rest: Array):(xs: T) => T; declare function dropLast|string>(n: number, xs: T): T; declare function dropLastWhile>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => T; declare function dropLastWhile>(fn: UnaryPredicateFn, xs:T): T; declare function dropWhile>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => T; declare function dropWhile>(fn: UnaryPredicateFn, xs:T): T; declare function dropRepeats>(xs:T): T; declare function dropRepeatsWith>(fn: BinaryPredicateFn, ...rest: Array): (xs:T) => T; declare function dropRepeatsWith>(fn: BinaryPredicateFn, xs:T): T; declare function groupBy(fn: (x: T) => string, xs: Array): {[key: string]: Array} declare function groupBy(fn: (x: T) => string, ...rest: Array): (xs: Array) => {[key: string]: Array} declare function groupWith|string>(fn: BinaryPredicateFn, xs: V): Array declare function groupWith|string>(fn: BinaryPredicateFn, ...rest: Array): (xs: V) => Array declare function head>(xs: V): ?T declare function head(xs: V): V declare function into,R:Array<*>|string|Object>(accum: R, xf: (a: A) => I, input: A): R declare function into,R>(accum: Transformer, xf: (a: A) => R, input: A): R declare function indexOf(x: E, xs: Array): number declare function indexOf(x: E, ...rest: Array): (xs: Array) => number declare function indexBy(fn: (x: T) => string, ...rest: Array): (xs: Array) => {[key: string]: T} declare function indexBy(fn: (x: T) => string, xs: Array): {[key: string]: T} declare function insert(index: number, ...rest: Array): (elem: T) => (src: Array) => Array declare function insert(index: number, elem: T, ...rest: Array): (src: Array) => Array declare function insert(index: number, elem: T, src: Array): Array declare function insertAll(index: number, ...rest: Array): (elem: Array) => (src: Array) => Array declare function insertAll(index: number, elems: Array, ...rest: Array): (src: Array) => Array declare function insertAll(index: number, elems: Array, src: Array): Array declare function join(x: string, xs: Array): string declare function join(x: string, ...rest: Array): (xs: Array) => string declare function last>(xs: V): ?T declare function last(xs: V): V declare function none(fn: UnaryPredicateFn, xs: Array): boolean; declare function none(fn: UnaryPredicateFn, ...rest: Array): (xs: Array) => boolean; declare function nth>(i: number, xs: T): ?V declare function nth|string>(i: number, ...rest: Array): ((xs: string) => string)&((xs: T) => ?V) declare function nth(i: number, xs: T): T declare function find|O>(fn: UnaryPredicateFn, ...rest: Array): (xs:T|O) => ?V|O; declare function find|O>(fn: UnaryPredicateFn, xs:T|O): ?V|O; declare function findLast|O>(fn: UnaryPredicateFn, ...rest: Array): (xs:T|O) => ?V|O; declare function findLast|O>(fn: UnaryPredicateFn, xs:T|O): ?V|O; declare function findIndex|{[key:K]:V}>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => number declare function findIndex|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T): number declare function findLastIndex|{[key:K]:V}>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => number declare function findLastIndex|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T): number declare function forEach(fn:(x:T) => ?V, xs: Array): Array declare function forEach(fn:(x:T) => ?V, ...rest: Array): (xs: Array) => Array declare function lastIndexOf(x: E, xs: Array): number declare function lastIndexOf(x: E, ...rest: Array): (xs: Array) => number declare function map(fn: (x:T) => R, xs: Array): Array; declare function map(fn: (x:T) => R, xs: S): S; declare function map(fn: (x:T) => R, ...rest: Array): ((xs: {[key: string]: T}) => {[key: string]: R}) & ((xs: Array) => Array) declare function map(fn: (x:T) => R, ...rest: Array): ((xs:S) => S) & ((xs: S) => S) declare function map(fn: (x:T) => R, xs: {[key: string]: T}): {[key: string]: R} declare type AccumIterator = (acc: R, x: A) => [R,B] declare function mapAccum(fn: AccumIterator, acc: R, xs: Array): [R, Array]; declare function mapAccum(fn: AccumIterator, ...rest: Array): (acc: R, xs: Array) => [R, Array]; declare function mapAccumRight(fn: AccumIterator, acc: R, xs: Array): [R, Array]; declare function mapAccumRight(fn: AccumIterator, ...rest: Array): (acc: R, xs: Array) => [R, Array]; declare function intersperse(x: E, xs: Array): Array declare function intersperse(x: E, ...rest: Array): (xs: Array) => Array declare function pair(a:A, b:B): [A,B] declare function pair(a:A, ...rest: Array): (b:B) => [A,B] declare function partition|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T): [T,T] declare function partition|{[key:K]:V}>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => [T,T] declare function pluck|{[key:string]:V}>>(k: K, xs: T): Array declare function pluck|{[key:string]:V}>>(k: K,...rest: Array): (xs: T) => Array declare var range: CurriedFunction2>; declare function remove(from: number, ...rest: Array): ((to: number, ...rest: Array) => (src: Array) => Array) & ((to: number, src: Array) => Array) declare function remove(from: number, to: number, ...rest: Array): (src: Array) => Array declare function remove(from: number, to: number, src: Array): Array declare function repeat(x: T, times: number): Array declare function repeat(x: T, ...rest: Array): (times: number) => Array declare function slice|string>(from: number, ...rest: Array): ((to: number, ...rest: Array) => (src: T) => T) & ((to: number, src: T) => T) declare function slice|string>(from: number, to: number, ...rest: Array): (src: T) => T declare function slice|string>(from: number, to: number, src: T): T declare function sort>(fn: (a:V, b:V) => number, xs:T): T declare function sort>(fn: (a:V, b:V) => number, ...rest: Array): (xs:T) => T declare function times(fn:(i: number) => T, n: number): Array declare function times(fn:(i: number) => T, ...rest: Array): (n: number) => Array declare function take|string>(n: number, xs: T): T; declare function take|string>(n: number):(xs: T) => T; declare function takeLast|string>(n: number, xs: T): T; declare function takeLast|string>(n: number):(xs: T) => T; declare function takeLastWhile>(fn: UnaryPredicateFn, xs:T): T; declare function takeLastWhile>(fn: UnaryPredicateFn): (xs:T) => T; declare function takeWhile>(fn: UnaryPredicateFn, xs:T): T; declare function takeWhile>(fn: UnaryPredicateFn): (xs:T) => T; declare function unfold(fn: (seed: T) => [R, T]|boolean, ...rest: Array): (seed: T) => Array declare function unfold(fn: (seed: T) => [R, T]|boolean, seed: T): Array declare function uniqBy(fn:(x: T) => V, ...rest: Array): (xs: Array) => Array declare function uniqBy(fn:(x: T) => V, xs: Array): Array declare function uniqWith(fn: BinaryPredicateFn, ...rest: Array): (xs: Array) => Array declare function uniqWith(fn: BinaryPredicateFn, xs: Array): Array declare function update(index: number, ...rest: Array): ((elem: T, ...rest: Array) => (src: Array) => Array) & ((elem: T, src: Array) => Array) declare function update(index: number, elem: T, ...rest: Array): (src: Array) => Array declare function update(index: number, elem: T, src: Array): Array // TODO `without` as a transducer declare function without(xs: Array, src: Array): Array declare function without(xs: Array, ...rest: Array): (src: Array) => Array declare function xprod(xs: Array, ys: Array): Array<[T,S]> declare function xprod(xs: Array, ...rest: Array): (ys: Array) => Array<[T,S]> declare function zip(xs: Array, ys: Array): Array<[T,S]> declare function zip(xs: Array, ...rest: Array): (ys: Array) => Array<[T,S]> declare function zipObj(xs: Array, ys: Array): {[key:T]:S} declare function zipObj(xs: Array, ...rest: Array): (ys: Array) => {[key:T]:S} declare type NestedArray = Array> declare function flatten(xs: NestedArray): Array; declare function fromPairs(pair: Array<[T,V]>): {[key: string]:V}; declare function init|string>(xs: V): V; declare function length(xs: Array): number; declare function mergeAll(objs: Array<{[key: string]: any}>):{[key: string]: any}; declare function reverse|string>(xs: V): V; declare function reduce(fn: (acc: A, elem: B) => A, ...rest: Array): ((init: A, xs: Array) => A) & ((init: A, ...rest: Array) => (xs: Array) => A); declare function reduce(fn: (acc: A, elem: B) => A, init: A, ...rest: Array): (xs: Array) => A; declare function reduce(fn: (acc: A, elem: B) => A, init: A, xs: Array): A; declare function reduceBy(fn: (acc: B, elem: A) => B, ...rest: Array): ((acc: B, ...rest: Array) => ((keyFn:(elem: A) => string, ...rest: Array) => (xs: Array) => {[key: string]: B}) & ((keyFn:(elem: A) => string, xs: Array) => {[key: string]: B})) & ((acc: B, keyFn:(elem: A) => string, ...rest: Array) => (xs: Array) => {[key: string]: B}) & ((acc: B, keyFn:(elem: A) => string, xs: Array) => {[key: string]: B}) declare function reduceBy(fn: (acc: B, elem: A) => B, acc: B, ...rest: Array): ((keyFn:(elem: A) => string, ...rest: Array) => (xs: Array) => {[key: string]: B}) & ((keyFn:(elem: A) => string, xs: Array) => {[key: string]: B}) declare function reduceBy(fn: (acc: B, elem: A) => B, acc: B, keyFn:(elem: A) => string): (xs: Array) => {[key: string]: B}; declare function reduceBy(fn: (acc: B, elem: A) => B, acc: B, keyFn:(elem: A) => string, xs: Array): {[key: string]: B}; declare function reduceRight(fn: (acc: A, elem: B) => A, ...rest: Array): ((init: A, xs: Array) => A) & ((init: A, ...rest: Array) => (xs: Array) => A); declare function reduceRight(fn: (acc: A, elem: B) => A, init: A, ...rest: Array): (xs: Array) => A; declare function reduceRight(fn: (acc: A, elem: B) => A, init: A, xs: Array): A; declare function scan(fn: (acc: A, elem: B) => A, ...rest: Array): ((init: A, xs: Array) => A) & ((init: A, ...rest: Array) => (xs: Array) => A); declare function scan(fn: (acc: A, elem: B) => A, init: A, ...rest: Array): (xs: Array) => A; declare function scan(fn: (acc: A, elem: B) => A, init: A, xs: Array): A; declare function splitAt|string>(i: number, xs: T): [T,T]; declare function splitAt|string>(i: number): (xs: T) => [T,T]; declare function splitEvery|string>(i: number, xs: T): Array; declare function splitEvery|string>(i: number): (xs: T) => Array; declare function splitWhen>(fn: UnaryPredicateFn, xs:T): [T,T]; declare function splitWhen>(fn: UnaryPredicateFn): (xs:T) => [T,T]; declare function tail|string>(xs: V): V; declare function transpose(xs: Array>): Array>; declare function uniq(xs: Array): Array; declare function unnest(xs: NestedArray): NestedArray; declare function zipWith(fn: (a: T, b: S) => R, ...rest: Array): ((xs: Array, ys: Array) => Array) & ((xs: Array, ...rest: Array ) => (ys: Array) => Array) declare function zipWith(fn: (a: T, b: S) => R, xs: Array, ...rest: Array): (ys: Array) => Array; declare function zipWith(fn: (a: T, b: S) => R, xs: Array, ys: Array): Array; // *Relation declare function equals(x: T, ...rest: Array): (y: T) => boolean; declare function equals(x: T, y: T): boolean; declare function eqBy(fn: (x: A) => B, ...rest: Array): ((x: A, y: A) => boolean) & ((x: A, ...rest: Array) => (y: A) => boolean); declare function eqBy(fn: (x: A) => B, x: A, ...rest: Array): (y: A) => boolean; declare function eqBy(fn: (x: A) => B, x: A, y: A): boolean; declare function propEq(prop: string, ...rest: Array): ((val: *, o: {[k:string]: *}) => boolean) & ((val: *, ...rest: Array) => (o: {[k:string]: *}) => boolean) declare function propEq(prop: string, val: *, ...rest: Array): (o: {[k:string]: *}) => boolean; declare function propEq(prop: string, val: *, o: {[k:string]:*}): boolean; declare function pathEq(path: Array, ...rest: Array): ((val: any, o: Object) => boolean) & ((val: any, ...rest: Array) => (o: Object) => boolean); declare function pathEq(path: Array, val: any, ...rest: Array): (o: Object) => boolean; declare function pathEq(path: Array, val: any, o: Object): boolean; declare function clamp(min: T, ...rest: Array): ((max: T, ...rest: Array) => (v: T) => T) & ((max: T, v: T) => T); declare function clamp(min: T, max: T, ...rest: Array): (v: T) => T; declare function clamp(min: T, max: T, v: T): T; declare function countBy(fn: (x: T) => string, ...rest: Array): (list: Array) => {[key: string]: number}; declare function countBy(fn: (x: T) => string, list: Array): {[key: string]: number}; declare function difference(xs1: Array, ...rest: Array): (xs2: Array) => Array; declare function difference(xs1: Array, xs2: Array): Array; declare function differenceWith(fn: BinaryPredicateFn, ...rest: Array): ((xs1: Array) => (xs2: Array) => Array) & ((xs1: Array, xs2: Array) => Array); declare function differenceWith(fn: BinaryPredicateFn, xs1: Array, ...rest: Array): (xs2: Array) => Array; declare function differenceWith(fn: BinaryPredicateFn, xs1: Array, xs2: Array): Array; declare function eqBy(fn: (x: T) => T, x: T, y: T): boolean; declare function eqBy(fn: (x: T) => T): (x: T, y: T) => boolean; declare function eqBy(fn: (x: T) => T, x: T): (y: T) => boolean; declare function eqBy(fn: (x: T) => T): (x: T) => (y: T) => boolean; declare function gt(x: T, ...rest: Array): (y: T) => boolean; declare function gt(x: T, y: T): boolean; declare function gte(x: T, ...rest: Array): (y: T) => boolean; declare function gte(x: T, y: T): boolean; declare function identical(x: T, ...rest: Array): (y: T) => boolean; declare function identical(x: T, y: T): boolean; declare function intersection(x: Array, y: Array): Array; declare function intersection(x: Array): (y: Array) => Array; declare function intersectionWith(fn: BinaryPredicateFn, ...rest: Array): ((x: Array, y: Array) => Array) & ((x: Array) => (y: Array) => Array); declare function intersectionWith(fn: BinaryPredicateFn, x: Array, ...rest: Array): (y: Array) => Array; declare function intersectionWith(fn: BinaryPredicateFn, x: Array, y: Array): Array; declare function lt(x: T, ...rest: Array): (y: T) => boolean; declare function lt(x: T, y: T): boolean; declare function lte(x: T, ...rest: Array): (y: T) => boolean; declare function lte(x: T, y: T): boolean; declare function max(x: T, ...rest: Array): (y: T) => T; declare function max(x: T, y: T): T; declare function maxBy(fn: (x:T) => V, ...rest: Array): ((x: T, y: T) => T) & ((x: T) => (y: T) => T); declare function maxBy(fn: (x:T) => V, x: T, ...rest: Array): (y: T) => T; declare function maxBy(fn: (x:T) => V, x: T, y: T): T; declare function min(x: T, ...rest: Array): (y: T) => T; declare function min(x: T, y: T): T; declare function minBy(fn: (x:T) => V, ...rest: Array): ((x: T, y: T) => T) & ((x: T) => (y: T) => T); declare function minBy(fn: (x:T) => V, x: T, ...rest: Array): (y: T) => T; declare function minBy(fn: (x:T) => V, x: T, y: T): T; // TODO: sortBy: Started failing in v38... // declare function sortBy(fn: (x:T) => V, ...rest: Array): (x: Array) => Array; // declare function sortBy(fn: (x:T) => V, x: Array): Array; declare function symmetricDifference(x: Array, ...rest: Array): (y: Array) => Array; declare function symmetricDifference(x: Array, y: Array): Array; declare function symmetricDifferenceWith(fn: BinaryPredicateFn, ...rest: Array): ((x: Array, ...rest: Array) => (y: Array) => Array) & ((x: Array, y: Array) => Array); declare function symmetricDifferenceWith(fn: BinaryPredicateFn, x: Array, ...rest: Array): (y: Array) => Array; declare function symmetricDifferenceWith(fn: BinaryPredicateFn, x: Array, y: Array): Array; declare function union(x: Array, ...rest: Array): (y: Array) => Array; declare function union(x: Array, y: Array): Array; declare function unionWith(fn: BinaryPredicateFn, ...rest: Array): ((x: Array, ...rest: Array) => (y: Array) => Array) & (x: Array, y: Array) => Array; declare function unionWith(fn: BinaryPredicateFn, x: Array, ...rest: Array): (y: Array) => Array; declare function unionWith(fn: BinaryPredicateFn, x: Array, y: Array): Array; // *Object declare function assoc(key: string, ...args: Array): ((val: T, ...rest: Array) => (src: {[k:string]:S}) => {[k:string]:S|T}) & ((val: T, src: {[k:string]:S}) => {[k:string]:S|T}); declare function assoc(key: string, val:T, ...args: Array): (src: {[k:string]:S}) => {[k:string]:S|T}; declare function assoc(key: string, val: T, src: {[k:string]:S}): {[k:string]:S|T}; declare function assocPath(key: Array, ...args: Array): ((val: T, ...rest: Array) => (src: {[k:string]:S}) => {[k:string]:S|T}) & ((val: T) => (src: {[k:string]:S}) => {[k:string]:S|T}); declare function assocPath(key: Array, val:T, ...args: Array): (src: {[k:string]:S}) => {[k:string]:S|T}; declare function assocPath(key: Array, val:T, src: {[k:string]:S}): {[k:string]:S|T}; declare function clone(src: T): $Shape; declare function dissoc(key: string, ...args: Array): ((val: T, ...rest: Array) => (src: {[k:string]:T}) => {[k:string]:T}) & ((val: T, src: {[k:string]:T}) => {[k:string]:T}); declare function dissoc(key: string, val:T, ...args: Array): (src: {[k:string]:T}) => {[k:string]:T}; declare function dissoc(key: string, val: T, src: {[k:string]:T}): {[k:string]:T}; declare function dissocPath(key: Array, ...args: Array): ((val: T, ...rest: Array) => (src: {[k:string]:T}) => {[k:string]:T}) & ((val: T) => (src: {[k:string]:T}) => {[k:string]:T}); declare function dissocPath(key: Array, val:T, ...args: Array): (src: {[k:string]:T}) => {[k:string]:T}; declare function dissocPath(key: Array, val:T, src: {[k:string]:T}): {[k:string]:T}; // TODO: Started failing in v31... (Attempt to fix below) // declare type __UnwrapNestedObjectR U>> = U // declare type UnwrapNestedObjectR = UnwrapNestedObjectR<*, *, T> // // declare function evolve R>>(fn: T, ...rest: Array): (src: NestedObject) => UnwrapNestedObjectR; // declare function evolve R>>(fn: T, src: NestedObject): UnwrapNestedObjectR; declare function eqProps(key: string, ...args: Array): ((o1: Object, ...rest: Array) => (o2: Object) => boolean) & ((o1: Object, o2: Object) => boolean); declare function eqProps(key: string, o1: Object, ...args: Array): (o2: Object) => boolean; declare function eqProps(key: string, o1: Object, o2: Object): boolean; declare function has(key: string, o: Object): boolean; declare function has(key: string):(o: Object) => boolean; declare function hasIn(key: string, o: Object): boolean; declare function hasIn(key: string): (o: Object) => boolean; declare function invert(o: Object): {[k: string]: Array}; declare function invertObj(o: Object): {[k: string]: string}; declare function keys(o: Object): Array; /* TODO lens lensIndex lensPath lensProp */ declare function mapObjIndexed(fn: (val: A, key: string, o: Object) => B, o: {[key: string]: A}): {[key: string]: B}; declare function mapObjIndexed(fn: (val: A, key: string, o: Object) => B, ...args: Array): (o: {[key: string]: A}) => {[key: string]: B}; declare function merge(o1: A, ...rest: Array): (o2: B) => A & B; declare function merge(o1: A, o2: B): A & B; declare function mergeAll(os: Array<{[k:string]:T}>): {[k:string]:T}; declare function mergeWith(fn: (v1: T, v2: S) => R): ((o1: A, ...rest: Array) => (o2: B) => A & B) & ((o1: A, o2: B) => A & B); declare function mergeWith(fn: (v1: T, v2: S) => R, o1: A, o2: B): A & B; declare function mergeWith(fn: (v1: T, v2: S) => R, o1: A, ...rest: Array): (o2: B) => A & B; declare function mergeWithKey(fn: (key: $Keys, v1: T, v2: S) => R): ((o1: A, ...rest: Array) => (o2: B) => A & B) & ((o1: A, o2: B) => A & B); declare function mergeWithKey(fn: (key: $Keys, v1: T, v2: S) => R, o1: A, o2: B): A & B; declare function mergeWithKey(fn: (key: $Keys, v1: T, v2: S) => R, o1: A, ...rest: Array): (o2: B) => A & B; declare function objOf(key: string, ...rest: Array): (val: T) => {[key: string]: T}; declare function objOf(key: string, val: T): {[key: string]: T}; declare function omit(keys: Array<$Keys>, ...rest: Array): (val: T) => Object; declare function omit(keys: Array<$Keys>, val: T): Object; // TODO over declare function path>(p: Array, ...rest: Array): (o: A) => ?V; declare function path>(p: Array, o: A): ?V; declare function pathOr>(or: T, ...rest: Array): ((p: Array, ...rest: Array) => (o: ?A) => V|T) & ((p: Array, o: ?A) => V|T); declare function pathOr>(or: T, p: Array, ...rest: Array): (o: ?A) => V|T; declare function pathOr>(or: T, p: Array, o: ?A): V|T; declare function pick(keys: Array, ...rest: Array): (val: {[key:string]: A}) => {[key:string]: A}; declare function pick(keys: Array, val: {[key:string]: A}): {[key:string]: A}; declare function pickAll(keys: Array, ...rest: Array): (val: {[key:string]: A}) => {[key:string]: ?A}; declare function pickAll(keys: Array, val: {[key:string]: A}): {[key:string]: ?A}; declare function pickBy(fn: BinaryPredicateFn2, ...rest: Array): (val: {[key:string]: A}) => {[key:string]: A}; declare function pickBy(fn: BinaryPredicateFn2, val: {[key:string]: A}): {[key:string]: A}; declare function project(keys: Array, ...rest: Array): (val: Array<{[key:string]: T}>) => Array<{[key:string]: T}>; declare function project(keys: Array, val: Array<{[key:string]: T}>): Array<{[key:string]: T}>; declare function prop(key: $Keys, ...rest: Array): (o: O) => ?T; declare function prop(key: $Keys, o: O): ?T; declare function propOr(or: T, ...rest: Array): ((p: $Keys, ...rest: Array) => (o: A) => V|T) & ((p: $Keys, o: A) => V|T); declare function propOr(or: T, p: $Keys, ...rest: Array): (o: A) => V|T; declare function propOr(or: T, p: $Keys, o: A): V|T; declare function keysIn(o: Object): Array; declare function props(keys: Array<$Keys>, ...rest: Array): (o: O) => Array; declare function props(keys: Array<$Keys>, o: O): Array; // TODO set declare function toPairs(o: O): Array<[$Keys, T]>; declare function toPairsIn(o: O): Array<[string, T]>; declare function values(o: O): Array; declare function valuesIn(o: O): Array; declare function where(predObj: {[key: string]: UnaryPredicateFn}, ...rest: Array): (o: {[k:string]:T}) => boolean; declare function where(predObj: {[key: string]: UnaryPredicateFn}, o: {[k:string]:T}): boolean; declare function whereEq(predObj: O, ...rest: Array): (o: $Shape) => boolean; declare function whereEq(predObj: O, o: $Shape): boolean; // TODO view // *Function declare var __: *; declare var T: (_: any) => boolean; declare var F: (_: any) => boolean; declare function addIndex(iterFn:(fn:(x:A) => B, xs: Array) => Array): (fn: (x: A, idx: number, xs: Array) => B, xs: Array) => Array; declare function always(x:T): (x: any) => T; declare function ap(fns: Array<(x:T) => V>, ...rest: Array): (xs: Array) => Array; declare function ap(fns: Array<(x:T) => V>, xs: Array): Array; declare function apply(fn: (...args: Array) => V, ...rest: Array): (xs: Array) => V; declare function apply(fn: (...args: Array) => V, xs: Array): V; declare function applySpec) => S>>(spec: T): (...args: Array) => NestedObject; declare function binary(fn:(...args: Array) => T): (x: any, y: any) => T; declare function bind(fn: (...args: Array) => any, thisObj: T): (...args: Array) => any; declare function call(fn: (...args: Array) => T, ...args: Array): T; declare function comparator(fn: BinaryPredicateFn): (x:T, y:T) => number; // TODO add tests declare function construct(ctor: Class>): (x: T) => GenericContructor; // TODO add tests declare function constructN(n: number, ctor: Class>): (...args: any) => GenericContructorMulti; // TODO make less generic declare function converge(after: Function, fns: Array): Function; declare function empty(x: T): T; declare function flip(fn: (arg0: A, arg1: B) => TResult): CurriedFunction2; declare function flip(fn: (arg0: A, arg1: B, arg2: C) => TResult): (( arg0: B, arg1: A, ...rest: Array) => (arg2: C) => TResult) & (( arg0: B, arg1: A, arg2: C) => TResult); declare function flip(fn: (arg0: A, arg1: B, arg2: C, arg3: D) => TResult): ((arg1: B, arg0: A, ...rest: Array) => (arg2: C, arg3: D) => TResult) & ((arg1: B, arg0: A, arg2: C, arg3: D) => TResult); declare function flip(fn: (arg0: A, arg1: B, arg2: C, arg3: D, arg4:E) => TResult): ((arg1: B, arg0: A, ...rest: Array) => (arg2: C, arg3: D, arg4: E) => TResult) & ((arg1: B, arg0: A, arg2: C, arg3: D, arg4: E) => TResult); declare function identity(x:T): T; declare function invoker(arity: number, name: $Enum): CurriedFunction2 & CurriedFunction3 & CurriedFunction4 declare function juxt(fns: Array<(...args: Array) => T>): (...args: Array) => Array; // TODO lift // TODO liftN declare function memoize) => B>(fn:T):T; declare function nAry(arity: number, fn:(...args: Array) => T): (...args: Array) => T; declare function nthArg(n: number): (...args: Array) => T; declare function of(x: T): Array; declare function once) => B>(fn:T):T; // TODO partial // TODO partialRight // TODO pipeK // TODO pipeP declare function tap(fn: (x: T) => any, ...rest: Array): (x: T) => T; declare function tap(fn: (x: T) => any, x: T): T; // TODO tryCatch declare function unapply(fn: (xs: Array) => V): (...args: Array) => V; declare function unary(fn:(...args: Array) => T): (x: any) => T; declare var uncurryN: & ((2, A => B => C) => (A, B) => C) & ((3, A => B => C => D) => (A, B, C) => D) & ((4, A => B => C => D => E) => (A, B, C, D) => E) & ((5, A => B => C => D => E => F) => (A, B, C, D, E) => F) & ((6, A => B => C => D => E => F => G) => (A, B, C, D, E, F) => G) & ((7, A => B => C => D => E => F => G => H) => (A, B, C, D, E, F, G) => H) & ((8, A => B => C => D => E => F => G => H => I) => (A, B, C, D, E, F, G, H) => I) //TODO useWith declare function wrap) => B>(fn: F, fn2: (fn: F, ...args: Array) => D): (...args: Array) => D; // *Logic declare function allPass(fns: Array<(...args: Array) => boolean>): (...args: Array) => boolean; declare function and(x: boolean, ...rest: Array): (y: boolean) => boolean; declare function and(x: boolean, y: boolean): boolean; declare function anyPass(fns: Array<(...args: Array) => boolean>): (...args: Array) => boolean; declare function both(x: (...args: Array) => boolean, ...rest: Array): (y: (...args: Array) => boolean) => (...args: Array) => boolean; declare function both(x: (...args: Array) => boolean, y: (...args: Array) => boolean): (...args: Array) => boolean; declare function complement(x: (...args: Array) => boolean): (...args: Array) => boolean; declare function cond(fns: Array<[(...args: Array) => boolean, (...args: Array) => B]>): (...args: Array) => B; declare function defaultTo(d: T, ...rest: Array): (x: ?V) => V|T; declare function defaultTo(d: T, x: ?V): V|T; declare function either(x: (...args: Array) => boolean, ...rest: Array): (y: (...args: Array) => boolean) => (...args: Array) => boolean; declare function either(x: (...args: Array) => boolean, y: (...args: Array) => boolean): (...args: Array) => boolean; declare function ifElse(cond:(...args: Array) => boolean, ...rest: Array): ((f1: (...args: Array) => B, ...rest: Array) => (f2: (...args: Array) => C) => (...args: Array) => B|C) & ((f1: (...args: Array) => B, f2: (...args: Array) => C) => (...args: Array) => B|C) declare function ifElse( cond:(...args: Array) => boolean, f1: (...args: Array) => B, f2: (...args: Array) => C ): (...args: Array) => B|C; declare function isEmpty(x:?Array|Object|string): boolean; declare function not(x:boolean): boolean; declare function or(x: boolean, y: boolean): boolean; declare function or(x: boolean): (y: boolean) => boolean; // TODO: pathSatisfies: Started failing in v39... // declare function pathSatisfies(cond: (x: T) => boolean, path: Array, o: NestedObject): boolean; // declare function pathSatisfies(cond: (x: T) => boolean, path: Array, ...rest: Array): (o: NestedObject) => boolean; // declare function pathSatisfies(cond: (x: T) => boolean, ...rest: Array): // ((path: Array, ...rest: Array) => (o: NestedObject) => boolean) // & ((path: Array, o: NestedObject) => boolean) declare function propSatisfies(cond: (x: T) => boolean, prop: string, o: NestedObject): boolean; declare function propSatisfies(cond: (x: T) => boolean, prop: string, ...rest: Array): (o: NestedObject) => boolean; declare function propSatisfies(cond: (x: T) => boolean, ...rest: Array): ((prop: string, ...rest: Array) => (o: NestedObject) => boolean) & ((prop: string, o: NestedObject) => boolean) declare function unless(pred: UnaryPredicateFn, ...rest: Array): ((fn: (x: S) => V, ...rest: Array) => (x: T|S) => T|V) & ((fn: (x: S) => V, x: T|S) => T|V); declare function unless(pred: UnaryPredicateFn, fn: (x: S) => V, ...rest: Array): (x: T|S) => V|T; declare function unless(pred: UnaryPredicateFn, fn: (x: S) => V, x: T|S): T|V; declare function until(pred: UnaryPredicateFn, ...rest: Array): ((fn: (x: T) => T, ...rest: Array) => (x: T) => T) & ((fn: (x: T) => T, x: T) => T); declare function until(pred: UnaryPredicateFn, fn: (x: T) => T, ...rest: Array): (x: T) => T; declare function until(pred: UnaryPredicateFn, fn: (x: T) => T, x: T): T; declare function when(pred: UnaryPredicateFn, ...rest: Array): ((fn: (x: S) => V, ...rest: Array) => (x: T|S) => T|V) & ((fn: (x: S) => V, x: T|S) => T|V); declare function when(pred: UnaryPredicateFn, fn: (x: S) => V, ...rest: Array): (x: T|S) => V|T; declare function when(pred: UnaryPredicateFn, fn: (x: S) => V, x: T|S): T|V; }