// @flow import {curry} from "flow-static-land/lib/Fun"; type ShouldProceed = ( element: Element, index: number, result: Result ) => boolean; type Reduce = ( result: Result, element: Element, index: number ) => Result; /** * Reduce the given array applying reduce function while shouldProceed function * returns true. */ const reduceWhile = ( shouldProceed: ShouldProceed, reduce: Reduce, resultInitial: Result, array: Array ): Result => { let result = resultInitial; array.every((element, index) => { const proceed = shouldProceed(element, index, result); if (proceed) { result = reduce(result, element, index); } return proceed; }); return result; }; export default curry(reduceWhile);