type ReduceWhileTag = 'cont' | 'halt';
type ReduceWhileTuple<TAccumulator> = [ReduceWhileTag, TAccumulator];
type ReduceWhileObject<TAccumulator> = {
    tag: ReduceWhileTag;
    value: TAccumulator;
};
type ReduceWhileStep<TAccumulator> = ReduceWhileTuple<TAccumulator> | ReduceWhileObject<TAccumulator>;
type ReduceWhileReducer<TAccumulator, TValue> = (accumulator: TAccumulator, value: TValue, index: number, array: TValue[]) => ReduceWhileStep<TAccumulator>;
export declare function reduce_while<TAccumulator, TValue>(values: TValue[] | unknown, initial: TAccumulator, reducer: ReduceWhileReducer<TAccumulator, TValue>): TAccumulator;
export {};
