declare module "./iterator" {
    interface LazyIterator<T, TReturn, TNext> {
        /**
         * Creates a lazy iterator that reduces the values in this lazy iterator to a single value.
         * @param reducer The reducer function to use to reduce values.
         */
        reduce(reducer: (accumulator: T, value: T) => T): T;
        /**
         * Creates a lazy iterator that reduces the values in this lazy iterator to a single value.
         * @param reducer The reducer function to use to reduce values.
         * @param initialValue The initial value to use for the accumulator.
         */
        reduce(reducer: (accumulator: T, value: T) => T, initialValue: T): T;
        /**
         * Creates a lazy iterator that reduces the values in this lazy iterator to a single value.
         * @param reducer The reducer function to use to reduce values.
         * @param initialValue The initial value to use for the accumulator.
         */
        reduce<U>(reducer: (accumulator: U, value: T) => U, initialValue: U): U;
    }
}
