import type { IProc } from "./api.js";
import { AProc } from "./aproc.js";
/**
 * Composes the given {@link IProc}s into a single new processor instance. The
 * returned `IProc` processes the given procs in serial (sequence), i.e. output
 * from 1st proc is used as input for 2nd etc.
 *
 * @remarks
 * Provides optimized (loop free) versions for 2-4 inputs
 *
 * @param a -
 * @param b -
 */
export declare function serial<A, B, C>(a: IProc<A, B>, b: IProc<B, C>): IProc<A, C>;
export declare function serial<A, B, C, D>(a: IProc<A, B>, b: IProc<B, C>, c: IProc<C, D>): IProc<A, D>;
export declare function serial<A, B, C, D, E>(a: IProc<A, B>, b: IProc<B, C>, c: IProc<C, D>, d: IProc<D, E>): IProc<A, E>;
export declare function serial<A, B, C, D, E>(a: IProc<A, B>, b: IProc<B, C>, c: IProc<C, D>, d: IProc<D, E>, ...procs: IProc<any, any>[]): IProc<A, any>;
export declare class Serial2<A, B, C> extends AProc<A, C> {
    protected _a: IProc<A, B>;
    protected _b: IProc<B, C>;
    constructor(_a: IProc<A, B>, _b: IProc<B, C>);
    next(x: A): C;
}
export declare class Serial3<A, B, C, D> extends AProc<A, D> {
    protected _a: IProc<A, B>;
    protected _b: IProc<B, C>;
    protected _c: IProc<C, D>;
    constructor(_a: IProc<A, B>, _b: IProc<B, C>, _c: IProc<C, D>);
    next(x: A): D;
}
export declare class Serial4<A, B, C, D, E> extends AProc<A, E> {
    protected _a: IProc<A, B>;
    protected _b: IProc<B, C>;
    protected _c: IProc<C, D>;
    protected _d: IProc<D, E>;
    constructor(_a: IProc<A, B>, _b: IProc<B, C>, _c: IProc<C, D>, _d: IProc<D, E>);
    next(x: A): E;
}
export declare class Serial extends AProc<any, any> {
    protected _procs: IProc<any, any>[];
    constructor(_procs: IProc<any, any>[]);
    next(x: any): any;
}
//# sourceMappingURL=serial.d.ts.map