/**
* Return a new function with the arguments partially applied
*
* Use Functional\…, Functional\…() or Functional\placeholder() as a placeholder
*
* @param callable $callback
* @param array $arguments
* @return callable
*/
function partial_any(callable $callback, ...$arguments)
{
return function (...$innerArguments) use($callback, $arguments) {
$placeholder = …();
foreach ($arguments as $position => &$argument) {
if ($argument === $placeholder) {
InvalidArgumentException::assertResolvablePlaceholder($innerArguments, $position);
$argument = array_shift($innerArguments);
}
}
return $callback(...$arguments);
};
}