diff --git a/CHANGELOG.md b/CHANGELOG.md index 933b1af..6e58504 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,3 +7,4 @@ - Requires PHP `8.4` - Requires `innmind/operating-system:~7.0` - Requires `innmind/time:~1.0` +- Tasks results are now accessible via `Continuation::results()` instead of scope's fourth argument diff --git a/proofs/functional.php b/proofs/functional.php index 8058859..3b3ce36 100644 --- a/proofs/functional.php +++ b/proofs/functional.php @@ -91,12 +91,12 @@ static function($assert, $value) { $values = Scheduler::of(Factory::build()) ->sink(Sequence::of()) ->with( - static fn($all, $__, $continuation, $results) => $continuation - ->schedule(match ([$all->size(), $results->size()]) { + static fn($all, $__, $continuation) => $continuation + ->schedule(match ([$all->size(), $continuation->results()->size()]) { [0, 0] => Sequence::of(static fn() => $value), default => Sequence::of(), }) - ->carryWith($all->append($results)) + ->carryWith($all->append($continuation->results())) ->wakeOnResult(), ); $assert->same([$value], $values->toList()); @@ -110,7 +110,7 @@ static function($assert) { Scheduler::of(Factory::build()) ->sink(false) ->with( - static fn($started, $os, $continuation, $results) => match ([$started, $results->size()]) { + static fn($started, $os, $continuation) => match ([$started, $continuation->results()->size()]) { [false, 0] => $continuation ->schedule(Sequence::of( static function($os) { @@ -459,13 +459,13 @@ static function($assert) { $results = Scheduler::of(Factory::build()) ->sink(Sequence::of()) ->with( - static fn($all, $__, $continuation, $results) => $continuation + static fn($all, $__, $continuation) => $continuation ->schedule(Sequence::of( static fn($os) => $os->process()->halt(Period::second(1))->unwrap(), static fn($os) => $os->process()->halt(Period::second(1))->unwrap(), static fn($os) => $os->process()->halt(Period::second(1))->unwrap(), )->map(Task\Discard::result(...))) - ->carryWith($all->append($results)) + ->carryWith($all->append($continuation->results())) ->wakeOnResult(), ); diff --git a/src/Scheduler/Sink.php b/src/Scheduler/Sink.php index 8bffd12..09cb56a 100644 --- a/src/Scheduler/Sink.php +++ b/src/Scheduler/Sink.php @@ -10,7 +10,6 @@ Config, }; use Innmind\OperatingSystem\OperatingSystem; -use Innmind\Immutable\Sequence; /** * @template C @@ -50,7 +49,7 @@ public static function of( } /** - * @param callable(C, OperatingSystem, Continuation, Sequence): Continuation $scope + * @param callable(C, OperatingSystem, Continuation): Continuation $scope * * @return C */ diff --git a/src/Scope.php b/src/Scope.php index 73436e3..781ad7e 100644 --- a/src/Scope.php +++ b/src/Scope.php @@ -5,7 +5,6 @@ use Innmind\Async\Scope\Continuation; use Innmind\OperatingSystem\OperatingSystem; -use Innmind\Immutable\Sequence; /** * @internal @@ -24,7 +23,7 @@ private function __construct( * @psalm-pure * @template C * - * @param callable(C, OperatingSystem, Continuation, Sequence): Continuation $scope + * @param callable(C, OperatingSystem, Continuation): Continuation $scope * * @return Scope\Uninitialized */ diff --git a/src/Scope/Continuation.php b/src/Scope/Continuation.php index 194a61e..68808f8 100644 --- a/src/Scope/Continuation.php +++ b/src/Scope/Continuation.php @@ -16,11 +16,13 @@ final class Continuation /** * @param Sequence $tasks * @param C $carry + * @param Sequence $results */ private function __construct( private Next $next, private Sequence $tasks, private mixed $carry, + private Sequence $results, ) { } @@ -30,16 +32,18 @@ private function __construct( * @internal * * @param A $carry + * @param Sequence $results * * @return self */ #[\NoDiscard] - public static function new(mixed $carry): self + public static function new(mixed $carry, Sequence $results): self { return new self( Next::restart, Sequence::of(), $carry, + $results, ); } @@ -55,6 +59,7 @@ public function carryWith(mixed $carry): self $this->next, $this->tasks, $carry, + $this->results, ); } @@ -74,9 +79,18 @@ public function schedule(Sequence $tasks): self ->prepend($this->tasks) ->snap(), $this->carry, + $this->results, ); } + /** + * @return Sequence + */ + public function results(): Sequence + { + return $this->results; + } + /** * @return self */ @@ -87,6 +101,7 @@ public function finish(): self Next::finish, $this->tasks, $this->carry, + $this->results, ); } @@ -100,6 +115,7 @@ public function wakeOnResult(): self Next::wake, $this->tasks, $this->carry, + $this->results, ); } @@ -116,6 +132,7 @@ public function terminate(): self Next::terminate, $this->tasks->clear(), $this->carry, + $this->results, ); } diff --git a/src/Scope/Restartable.php b/src/Scope/Restartable.php index 6ac66a0..c62def4 100644 --- a/src/Scope/Restartable.php +++ b/src/Scope/Restartable.php @@ -61,8 +61,10 @@ public function next( $return = Suspension::of($fiber->start( $this->carry, $async, - Continuation::new($this->carry), - $results, + Continuation::new( + $this->carry, + $results, + ), )); if ($return instanceof Suspension) { diff --git a/src/Scope/Uninitialized.php b/src/Scope/Uninitialized.php index 36ecd0e..fb79672 100644 --- a/src/Scope/Uninitialized.php +++ b/src/Scope/Uninitialized.php @@ -51,8 +51,10 @@ public function next(OperatingSystem $async): Suspended|Restartable|Wakeable|Ter $return = Suspension::of($fiber->start( $this->carry, $async, - Continuation::new($this->carry), - Sequence::of(), // no results + Continuation::new( + $this->carry, + Sequence::of(), // no results + ), )); if ($return instanceof Suspension) { diff --git a/src/Scope/Wakeable.php b/src/Scope/Wakeable.php index d9f0da6..3d6cddb 100644 --- a/src/Scope/Wakeable.php +++ b/src/Scope/Wakeable.php @@ -62,8 +62,10 @@ public function next( $return = Suspension::of($fiber->start( $this->carry, $async, - Continuation::new($this->carry), - $results, + Continuation::new( + $this->carry, + $results, + ), )); if ($return instanceof Suspension) {