export interface OneMore<T, R> {
    (): OneMore<T, R>;
    (t: T): R;
}
export interface TwoMore<T1, T2, R> {
    (): TwoMore<T1, T2, R>;
    (t1: T1): OneMore<T2, R>;
    (t1: T1, t2: T2): R;
}
export interface ThreeMore<T1, T2, T3, R> {
    (): ThreeMore<T1, T2, T3, R>;
    (t1: T1): TwoMore<T2, T3, R>;
    (t1: T1, t2: T2): OneMore<T3, R>;
    (t1: T1, t2: T2, t3: T3): R;
}
/**
 * Takes a function with 1 argument and returns a curried version of it
 *
 * @export
 * @template A
 * @template B
 * @param {(a: A) => B} f
 * @returns {OneMore<A, B>}
 */
export declare function curry1<A, B>(f: (a: A) => B): OneMore<A, B>;
/**
 * Takes a function with 2 arguments and returns a curried version of it
 *
 * @export
 * @template A
 * @template B
 * @template C
 * @param {(a: A, b: B) => C} f
 * @returns {TwoMore<A, B, C>}
 */
export declare function curry2<A, B, C>(f: (a: A, b: B) => C): TwoMore<A, B, C>;
/**
 * Takes a function with 3 arguments and returns a curried version
 *
 * @export
 * @template A
 * @template B
 * @template C
 * @template D
 * @param {(a: A, b: B, c: C) => D} f
 * @returns {ThreeMore<A, B, C, D>}
 */
export declare function curry3<A, B, C, D>(f: (a: A, b: B, c: C) => D): ThreeMore<A, B, C, D>;
