import {Either} from './either'; import {Maybe} from "./maybe"; import {Cancelable} from "./cancelable"; type Applicative = Cancelable|Promise|Either|Maybe; export function find(predicate:(a: A) => boolean, list: Array): Maybe; export function find(predicate:(a: A) => boolean): (list: Array) => Maybe; export function head(list: Array): Maybe; export function head(list: string): Maybe; export function last(list: Array): Maybe; export function last(list: string): Maybe; export function map(a2b: (a: A) => B, ma: [A]): [B]; export function map(a2b: (a: A) => B): (ma: [A]) => [B]; export function nth(index: number, list: Array): Maybe; export function nth(index: number, list: string): Maybe; export function nth(index: number): (list: Array) => Maybe; export function nth(index: number): (list: string) => Maybe; export function sequence( ofF: (a: A) => Applicative, liftA2: (f: (a: A) => (b: B) => C) => (ma: Applicative, mb: Applicative) => Applicative, mfa: Array>): Applicative>; export function sequence( ofF: (a: A) => Applicative, liftA2: (f: (a: A) => (b: B) => C) => (ma: Applicative, mb: Applicative) => Applicative): (mfa: Array>) => Applicative>; //((a → f a), ((a → b → c) → f a → f b → f c) → (a → f b) → [a] → f [b] export function traverse( ofF: (a: A) => Applicative, liftA2: (f: (a: A) => (b: B) => C) => (ma: Applicative, mb: Applicative) => Applicative, effect: (a: A) => Applicative, ma: Array) : Applicative>; export function traverse( ofF: (a: A) => Applicative, liftA2: (f: (a: A) => (b: B) => C) => (ma: Applicative, mb: Applicative) => Applicative, effect: (a: A) => Applicative) : (ma: Array) => Applicative>; export function traverse( ofF: (a: A) => Applicative, liftA2: (f: (a: A) => (b: B) => C) => (ma: Applicative, mb: Applicative) => Applicative): (effect: (a: A) => Applicative) => (ma: Array) => Applicative>;