From 884f64c9ebbda993c533ae5b9c04add187e32394 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Wed, 28 Dec 2022 16:33:50 +0100 Subject: [PATCH] fix: `reduce` operation, use `ReduceIterableIterator` Also minor performance improvements --- composer.json | 2 +- src/Operation/Reduce.php | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index d16aed0b6..7a16482b3 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,7 @@ ], "require": { "php": ">= 8", - "loophp/iterators": "^2" + "loophp/iterators": "^2.3.1" }, "require-dev": { "amphp/parallel-functions": "^1", diff --git a/src/Operation/Reduce.php b/src/Operation/Reduce.php index 579519d79..a800ba695 100644 --- a/src/Operation/Reduce.php +++ b/src/Operation/Reduce.php @@ -6,6 +6,7 @@ use Closure; use Generator; +use loophp\iterators\ReduceIterableAggregate; /** * @immutable @@ -35,15 +36,12 @@ public function __invoke(): Closure * * @return Closure(iterable): Generator */ - static function (mixed $initial) use ($callback): Closure { - /** @var Closure(iterable): Generator $pipe */ - $pipe = (new Pipe())()( - (new Reduction())()($callback)($initial), - (new Last())(), - ); - - // Point free style. - return $pipe; - }; + static fn (mixed $initial): Closure => + /** + * @param iterable $iterable + * + * @return Generator + */ + static fn (iterable $iterable): Generator => yield from new ReduceIterableAggregate($iterable, $callback, $initial); } }