import { curry, Predicate } from '@typed/lambda' import { not } from './not' /** * Returns true if value matches a list of predicates. * @param predicates :: [(a -> boolean)] * @param value :: a * @returns :: boolean */ export const allPass: { (predicates: ReadonlyArray>, value: A): boolean (predicates: ReadonlyArray>): Predicate } = curry(__allPass) as { (predicates: ReadonlyArray>, value: A): boolean (predicates: ReadonlyArray>): Predicate } function __allPass(predicates: ReadonlyArray>, value: A): boolean { const predicateCount = predicates.length for (let i = 0; i < predicateCount; ++i) { if (not(predicates[i](value))) { return false } } return true }