not(); } function always() { return ConstantPredicate::always(); } function never() { return ConstantPredicate::never(); } function unpack($arguments) { return count($arguments) === 1 && is_array(reset($arguments)) ? reset($arguments) : $arguments; } function all(...$predicates) { $predicates = unpack($predicates); return new AllOfPredicate(...array_map(predicate::class, $predicates)); } function any(...$predicates) { $predicates = unpack($predicates); return new AnyOfPredicate(...array_map(predicate::class, $predicates)); } function symbol($name = null) { $id = random_bytes(64); return sprintf("%s(%s)", $name ?: 'symbol', $id); } function reflect(callable $callable): \ReflectionFunctionAbstract { switch (true) { case $callable instanceof PartiallyAppliedFunction: return new ReflectionPartiallyAppliedFunction($callable); default: return new \ReflectionFunction($callable); } } define(__NAMESPACE__.'\\_', symbol('placeholder'));