export declare namespace Functions {
    type Callback = () => void;
    type Provider<T> = () => T;
    type MapFunction<T, R> = (data: T) => R;
    type Consumer<T> = MapFunction<T, void>;
    type Filter<T> = MapFunction<T, boolean>;
    type Comparator<T> = (a: T, b: T) => number;
    type ArgsFunction<ARGS extends unknown[], R> = (...args: ARGS) => R;
    function noop(..._args: any[]): void;
    function identity<T>(arg: T): Provider<T>;
    function join<ARGS extends unknown[]>(...functions: ArgsFunction<ARGS, void>[]): ArgsFunction<ARGS, void>;
    function extractor<T, K extends keyof T = keyof T>(field: K): MapFunction<T, T[K]>;
    type PipedFunction<F extends ArgsFunction<any[], any>> = F & {
        pipe<NEXT extends MapFunction<ReturnType<F>, any>>(next: NEXT): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT>>>;
        pipe<NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>>(next1: NEXT1, next2: NEXT2): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT2>>>;
        pipe<NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>, NEXT3 extends MapFunction<ReturnType<NEXT2>, any>>(next1: NEXT1, next2: NEXT2, next3: NEXT3): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT3>>>;
        pipe<NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>, NEXT3 extends MapFunction<ReturnType<NEXT2>, any>, NEXT4 extends MapFunction<ReturnType<NEXT3>, any>>(next1: NEXT1, next2: NEXT2, next3: NEXT3, next4: NEXT4): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT4>>>;
        pipe<NEXTS extends MapFunction<any, any>[]>(...nexts: NEXTS): PipedFunction<ArgsFunction<Parameters<F>, any>>;
    };
    function pipe<F extends ArgsFunction<any[], any>>(fn: F): PipedFunction<F>;
    function pipe<F extends ArgsFunction<any[], any>, NEXT1 extends MapFunction<ReturnType<F>, any>>(fn: F, next1: NEXT1): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT1>>>;
    function pipe<F extends ArgsFunction<any[], any>, NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>>(fn: F, next1: NEXT1, next2: NEXT2): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT2>>>;
    function pipe<F extends ArgsFunction<any[], any>, NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>, NEXT3 extends MapFunction<ReturnType<NEXT2>, any>>(fn: F, next1: NEXT1, next2: NEXT2, next3: NEXT3): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT3>>>;
    function pipe<F extends ArgsFunction<any[], any>>(...fns: F[]): PipedFunction<ArgsFunction<Parameters<F>, any>>;
    type MemoizedFunction<F extends ArgsFunction<any[], any>> = {
        (...args: Parameters<F>): ReturnType<F>;
        clear(): void;
    };
    function memo<F extends ArgsFunction<any[], any>>(func: F, cacheId?: Functions.MapFunction<Parameters<F>, string>): MemoizedFunction<F>;
    function retry<F extends ArgsFunction<unknown[], unknown>>(func: F, count?: number, onError?: Functions.Consumer<unknown>): ReturnType<F>;
    function retryAsync<F extends ArgsFunction<unknown[], Promise<unknown>>>(func: F, count?: number, onError?: Functions.Consumer<unknown>): Promise<Awaited<ReturnType<F>>>;
}
