/** * reduce :: Foldable t => (b -> a -> b) -> b -> t a -> b * * @param callable $callable Binary function ($accumulator, $value) * @param mixed $accumulator * @param Foldable $foldable * * @return mixed */ function reduce(callable $callable, $accumulator = null, Foldable $foldable = null) { return call_user_func_array(curryN(3, function (callable $callable, $accumulator, Foldable $foldable) { return $foldable->reduce($callable, $accumulator); }), func_get_args()); }