import { LazyIterator } from './iterator.cjs';

type YieldMapper<F, T> = (value: F, index: number) => T;
type ReturnMapper<F, T> = (value: F) => T;
/**
 * A lazy iterator that maps values from the source iterator.
 */
declare class LazyMapIterator<F, T, FReturn = any, TReturn = FReturn, TNext = undefined> extends LazyIterator<T, TReturn, TNext> {
    source: LazyIterator<F, FReturn, TNext>;
    yieldMapper: YieldMapper<F, T>;
    returnMapper: ReturnMapper<FReturn, TReturn>;
    protected currentPos: number;
    constructor(source: LazyIterator<F, FReturn, TNext>, yieldMapper: YieldMapper<F, T>, returnMapper: ReturnMapper<FReturn, TReturn>);
    next(...args: [] | [TNext]): {
        done: true;
        value: TReturn;
    } | {
        done: false;
        value: T;
    };
}
declare module "./iterator" {
    interface LazyIterator<T, TReturn = any, TNext = undefined> {
        /**
         * Creates a lazy iterator that maps values from this lazy iterator.
         * @param yieldMapper The mapper function to use to map values.
         * @param returnMapper The mapper function to use to map the return value.
         */
        map<N, NReturn>(yieldMapper: YieldMapper<T, N>, returnMapper?: ReturnMapper<TReturn, NReturn>): LazyMapIterator<T, N, TReturn, NReturn, TNext>;
    }
}

export { LazyMapIterator, ReturnMapper, YieldMapper };
