rubico
Version:
[a]synchronous functional programming
27 lines (24 loc) • 684 B
JavaScript
const reducerAnySync = require('./reducerAnySync')
const curry2 = require('./curry2')
const __ = require('./placeholder')
const isPromise = require('./isPromise')
/**
* @name reducerSome
*
* @synopsis
* ```coffeescript [specscript]
* reducerSome(
* predicate any=>boolean,
* ) -> anyReducer (result boolean, element any)=>boolean
* ```
*
* @related foldableAllReducer
*
* @TODO throw to break early?
*/
const reducerSome = predicate => function anyReducer(result, element) {
return result === true ? result
: isPromise(result) ? result.then(curry2(reducerAnySync(predicate), __, element))
: result ? true : predicate(element)
}
module.exports = reducerSome