import {Functor} from "./common"; // copied in part from the ts branch of ramda export function chain(fn: (n: A) => readonly B[], list: readonly A[]): B[]; export function chain(fn: (n: A) => readonly B[]): (list: readonly A[]) => B[]; export function chain(aToMb: (a: A, r: R) => B, Ma: (r: R) => A): (r: R) => B; export function chain(aToMb: (a: A, r: R) => B): (Ma: (r: R) => A) => (r: R) => B; export function map(fn: (x: T) => U, list: readonly T[]): U[]; export function map(fn: (x: T) => U): (list: readonly T[]) => U[]; export function map(fn: (x: T[keyof T & keyof U]) => U[keyof T & keyof U], list: T): U; export function map(fn: (x: T[keyof T & keyof U]) => U[keyof T & keyof U]): (list: T) => U; export function map(fn: (x: T) => U, obj: Functor): Functor; export function map(fn: (x: T) => U): (obj: Functor) => Functor; export function map(fn: (x: T) => U, obj: Promise): Promise; export function map(fn: (x: T) => U): (obj: Promise) => Promise; export function pluck(p: K, list: readonly T[]): Array; export function pluck(p: number, list: Array<{ [k: number]: T }>): T[]; export function pluck

(p: P): (list: Array>) => T[]; export function pluck(p: number): (list: Array<{ [k: number]: T }>) => T[]; export function pluck(propertyName: string, mKv: Functor>): Functor; export function pluck(propertyName: string): (mKv: Functor>) => Functor; export function pluck(index: number, mKv: Functor<[T]>): Functor; export function pluck(index: number): (mKv: Functor<[T]>) => Functor; interface Applicative {} interface Traversable {} interface TypeRep { "fantasy-land/of": (x: X) => Applicative of: (x: X) => Applicative } // (Applicative f, Traversable t) => TypeRep f -> (a -> f b) -> t a -> f (t b) export function traverse, FTB extends Applicative>>( typeRep: TypeRep>, fn: (a: A) => FB, traversable: Traversable): FTB; export function traverse(typeRep: TypeRep, fn: (t: A) => B[], list: readonly A[]): B[][]; export function traverse, FTB extends Applicative>>( typeRep: TypeRep>, fn: (a: A) => FB): (traversable: Traversable) => FTB; export function traverse(typeRep: TypeRep, fn: (t: A) => B[]): (list: readonly A[]) => B[][]; export function traverse, FTB extends Applicative>>( typeRep: TypeRep>): (fn: (a: A) => FB) => (traversable: Traversable) => FTB; export function traverse(typeRep: TypeRep): (fn: (t: A) => B[], list: readonly A[]) => B[][]; // (Applicative f, Traversable t) => TypeRep f -> t (f a) -> f (t a) export function sequence>, FTB extends Applicative>>( typeRep: TypeRep>, traversable: TFA): FTB; export function sequence>, FTB extends Applicative>>( typeRep: TypeRep>): (traversable: TFA) => FTB;