/** @module functor-helpers.ts */ import { HKT, Type, URIS } from 'fp-ts/lib/HKT'; import { Append, Concat, Concattable, Function1, Functor, Predicate, Prepend, Pushable, ValueOf } from './helper-types'; interface ConcatCurried { (item: B): Concat; (item: B): B extends any[] ? Array | ValueOf> : Concat; (item: B): Array | ValueOf>; } export declare function concat(acc: A, item: B): Concat; export declare function concat(acc: A): ConcatCurried; export declare function concat(acc: A, item: B): B extends any[] ? Array | ValueOf> : Concat; export declare function concat(acc: A): ConcatCurried; export declare function concat(acc: A, item: B): Array | ValueOf>; export declare function concat(acc: A): ConcatCurried; export declare function concat(acc: A, item: B): Array | ValueOf>; export declare function concat(acc: A): (item: B) => Array | ValueOf>; export declare function concat(acc: ConcatArray, item: A): ConcatArray; export declare function concat(acc: ConcatArray): (item: A) => ConcatArray; export declare function concat(acc: Concattable, item: A): Concattable; export declare function concat(acc: Concattable): (item: A) => Concattable; export declare function concat(arr: A[], item: A): A[]; export declare function concat(arr: A[]): (item: A) => A[]; export declare function concat, B extends any>(arr: A): (item: B) => Array; /** * Flips the order of parameters of `concat` which calls `concat` * on an array or a concattable. Also typed to work well with tuples. * @param item * @param arr */ export declare function flipConcat(item: A, acc: B): Concat; export declare function flipConcat(item: A): (acc: B) => Concat; export declare function flipConcat(item: A, acc: B): A extends any[] ? Array | ValueOf> : Concat; export declare function flipConcat(item: A): (acc: B) => A extends any[] ? Array | ValueOf> : Concat; export declare function flipConcat(item: A, acc: B): Array | ValueOf>; export declare function flipConcat(item: A): (acc: B) => Array | ValueOf>; export declare function flipConcat(item: A, acc: ConcatArray): ConcatArray; export declare function flipConcat(item: A): (acc: ConcatArray) => ConcatArray; export declare function flipConcat(item: A, acc: Concattable): Concattable; export declare function flipConcat(item: A): (acc: Concattable) => Concattable; export declare function flipConcat(item: A, arr: A[]): A[]; export declare function flipConcat(item: A): (arr: A[]) => A[]; export declare function flipConcat, B extends any>(item: B): (arr: A) => Array; declare module 'fp-ts/lib/HKT' { interface URI2HKT { 'Array': A[]; } } export declare function push(acc: A, item: B): Append; export declare function push(acc: A): (item: B) => Append; export declare function push(acc: A, item: B): Array | B>; export declare function push(acc: A): (item: B) => Array | B>; export declare function push(acc: Pushable, item: A): Pushable; export declare function push(acc: Pushable): (item: A) => Pushable; export declare function unshift(acc: A, item: B): Prepend; export declare function unshift(acc: A): (item: B) => Prepend; export declare function unshift(acc: A, item: B): Array | B>; export declare function unshift(acc: A): (item: B) => Array | B>; interface IPrepend { (acc: A): Prepend; (acc: A): Array | B>; } export declare function prepend(item: B, acc: A): Prepend; export declare function prepend(item: B, acc: A): Array | B>; export declare function prepend(item: B): IPrepend; /** * Takes a function and a filterable and returns said filterable after transformation * (a -> bool) -> c a -> c a */ export declare function filter(fn: Predicate, functor: F): F; export declare function filter(fn: Predicate): (functor: F) => F; /** * Takes a function and a functor and lifts function over values in functor * (a -> b) -> f a -> f b */ export declare function map(fn: Function1, functor: HKT & Functor): Type; export declare function map(fn: Function1): (functor: HKT & Functor) => Type; interface Reduce { (initial: V): (functor: (HKT & Functor) | A[]) => V; (initial: V, functor: (HKT & Functor) | A[]): V; } export declare function reduce(fn: (acc: V, item: A) => V, initial: V, functor: (HKT & Functor) | A[]): V; export declare function reduce(fn: (acc: V, item: A) => V, initial: V): (functor: (HKT & Functor) | A[]) => V; export declare function reduce(fn: (acc: V, item: A) => V): Reduce; interface Fold { (fn: (acc: V, item: A) => V): (functor: (HKT & Functor) | A[]) => V; (fn: (acc: V, item: A) => V, functor: (HKT & Functor) | A[]): V; } export declare function fold(initial: V, fn: (acc: V, item: A) => V, functor: (HKT & Functor) | A[]): V; export declare function fold(initial: V, fn: (acc: V, item: A) => V): (functor: (HKT & Functor) | A[]) => V; export declare function fold(initial: V): Fold; export {};