Logic
allPass
[(*... -> Boolean) -> *... -> Boolean
Added in: v1.0
Takes a list of predicates and returns a predicate that returns true
for a given list of arguments if every one of the provided predicates is satisfied by those arguments.
The function returned is a curried function whose arity matches that of the highest-arity predicate.
$ace = P::propEq('rank', 'A');
$spades = P::propEq('suit', '♠︎');
$aceOfSpades = P::allPass([$ace, $spades]);
$aceOfSpades(['rank' => 'A', 'suit' => '♠︎']); // true
both
(*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean)
Boolean -> Boolean -> Boolean
Added in: v1.0
Returns true
when both of two provided values are truthy.
This function is polymorphic and supports two cases:
1. when both values are predicates it will return wrapper function which call to the two functions in an &&
operation, returning true
if both of the functions will return truthy value.
2. when both values are booleans it will return result of &&
operation
$gt10 = P::partial(P::gt, [P::__, 10]);
$lt20 = P::partial(P::lt, [P::__, 20]);
$f = P::both($gt10, $lt20);
$f(12); // true
P::both(true, false); // false
cond
[[(*… → Boolean),(*… → *)]] → (*… → *)
Added in: v1.0
Returns a function, fn
, which encapsulates if/else
, if/else
logic. P::cond
takes a list of [predicate
, transformer
] pairs. All of the arguments to fn
are applied to each of the predicates
in turn until one returns a truth-y value, at which point fn
returns the result of applying its arguments to the corresponding transformer
. If none of the predicates
matches, fn
returns null.
$fn = P::cond([
[P::equals(0), P::always('water freezes at 0°C')],
[P::equals(100), P::always('water boils at 100°C')],
[P::T, function(temp) {
return 'nothing special happens at ' + temp + '°C';
}]
]);
$fn(0); //=> 'water freezes at 0°C'
$fn(50); //=> 'nothing special happens at 50°C'
$fn(100); //=> 'water boils at 100°C'
defaultTo
a -> b -> b | a
Added in: v1.0
Returns the second argument if it is not null
; otherwise the first argument is returned.
P::defaultTo(42, null); // 42
P::defaultTo(42, 'life'); // 'life'
either
(*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean)
Boolean -> Boolean -> Boolean
Added in: v1.0
Returns true
when one of two provided values is truthy.
This function is polymorphic and supports two cases:
1. when both values are predicates it will return wrapper function which call to the two functions in an ||
operation, returning true
if at least one of the functions will return truthy value.
2. when both values are booleans it will return result of ||
operation
$lt10 = P::partial(P::lt, [P::__, 10]);
$gt20 = P::partial(P::gt, [P::__, 20]);
$f = P::either($lt10, $gt20);
$f(12); // false
$f(9); // true
$f(21); // true
P::either(true, false); // true
ifElse
(*... -> Boolean) -> (*... -> *) -> (*... -> *) -> (*... -> *)
Added in: v1.0
Creates a function that will process either the onTrue
or the onFalse
function depending upon the result of the condition predicate.
$modulo15 = P::swap(P::modulo)(15);
$fizzbuzz = P::ifElse(
P::compose(P::equals(0), $modulo15),
P::always('fizzbuzz'),
P::identity
);
$fizzbuzz(15); // 'fizzbuzz'
$fizzbuzz(1); // 1
isEmpty
a -> Boolean
Added in: v1.0
Returns true
if the given value is its type's empty value; false
otherwise.
Note unlike \empty()
this function will consider numbers, booleans and NULL as non-empty.
P::isEmpty(''); // true
P::isEmpty([]); // true
P::isEmpty(new stdClass); // true
P::isEmpty(0); // false
P::isEmpty(null); // false
P::isEmpty(false); // false
P::isEmpty(true); // false
not
* -> Boolean
Added in: v1.0
A function that returns the !
of its argument. It will return true
when passed false-y value, and false
when passed a truth-y one.
P::not(0); // true
P::not(true); // false