// @flow import {curry} from "flow-static-land/lib/Fun"; type Filter = ( element: Element, index: number, result: Result ) => boolean; type Reduce = ( result: Result, element: Element, index: number ) => $Subtype; /** * Reduce the given array applying reduce function only to elements filtered. */ const reduceIf = ( filter: Filter, reduce: Reduce, resultInitial: $Subtype, array: Array<$Subtype> ): Result => array.reduce( (result, element, index) => filter(element, index, result) ? reduce(result, element, index) : result, resultInitial ); export default curry(reduceIf);