From 0c95532414ff150c865221254054fbef81246d73 Mon Sep 17 00:00:00 2001 From: thgs Date: Sun, 31 Oct 2021 13:25:25 +0000 Subject: [PATCH] support callable --- src/Option.php | 52 +++++++++++++++++++-------------------- src/Option/None.php | 59 +++++++++++++++++++++++---------------------- src/Option/Some.php | 58 ++++++++++++++++++++++---------------------- 3 files changed, 85 insertions(+), 84 deletions(-) diff --git a/src/Option.php b/src/Option.php index 1539901..42e79a3 100644 --- a/src/Option.php +++ b/src/Option.php @@ -1,4 +1,5 @@ */ - abstract public function map(Closure $mapper): Option; + abstract public function map(callable $mapper): Option; /** * Applies a function to the contained value (if any), or returns a default (if not). @@ -98,26 +98,26 @@ abstract public function map(Closure $mapper): Option; * * @param mixed $default * @psalm-param U $default - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return mixed * @psalm-return U */ - abstract public function mapOr($default, Closure $mapper); + abstract public function mapOr($default, callable $mapper); /** * Applies a function to the contained value (if any), or computes a default (if not). * * @template U * - * @param Closure $default - * @psalm-param Closure(mixed...):U $default - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $default + * @psalm-param callable(mixed...):U $default + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return mixed * @psalm-return U */ - abstract public function mapOrElse(Closure $default, Closure $mapper); + abstract public function mapOrElse(callable $default, callable $mapper); /** * Transforms the Option into a Result, mapping Some(v) to Ok(v) and None to Err(err). @@ -136,12 +136,12 @@ abstract public function okOr($err): Result; * * @template E * - * @param Closure $err - * @psalm-param Closure(mixed...):E $err + * @param callable $err + * @psalm-param callable(mixed...):E $err * @return Result * @psalm-return Result */ - abstract public function okOrElse(Closure $err): Result; + abstract public function okOrElse(callable $err): Result; /** * Returns an iterator over the possibly contained value. @@ -170,12 +170,12 @@ abstract public function and(Option $optb): Option; * * @template U * - * @param Closure $op - * @psalm-param Closure(T=,mixed...):Option $op + * @param callable $op + * @psalm-param callable(T=,mixed...):Option $op * @return Option * @psalm-return Option */ - abstract public function andThen(Closure $op): Option; + abstract public function andThen(callable $op): Option; /** * Returns the option if it contains a value, otherwise returns optb. @@ -190,15 +190,15 @@ abstract public function or(Option $optb): Option; /** * Returns the option if it contains a value, otherwise calls op and returns the result. * - * @param Closure $op - * @psalm-param Closure(mixed...):Option $op + * @param callable $op + * @psalm-param callable(mixed...):Option $op * @return Option * @psalm-return Option */ - abstract public function orElse(Closure $op): Option; + abstract public function orElse(callable $op): Option; /** - * The attached pass-through args will be unpacked into extra args into chained closures + * The attached pass-through args will be unpacked into extra args into chained callables * * @param mixed ...$args * @return Option diff --git a/src/Option/None.php b/src/Option/None.php index 2e0981d..b75ff90 100644 --- a/src/Option/None.php +++ b/src/Option/None.php @@ -1,4 +1,5 @@ pass = $pass; } @@ -100,14 +101,14 @@ public function unwrapOr($optb) } /** - * Returns the contained value or computes it from a closure. + * Returns the contained value or computes it from a callable. * - * @param Closure $op - * @psalm-param Closure(mixed...):T $op + * @param callable $op + * @psalm-param callable(mixed...):T $op * @return mixed * @psalm-return T */ - public function unwrapOrElse(Closure $op) + public function unwrapOrElse(callable $op) { return $op(...$this->pass); } @@ -117,12 +118,12 @@ public function unwrapOrElse(Closure $op) * * @template U * - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return Option * @psalm-return Option */ - public function map(Closure $mapper): Option + public function map(callable $mapper): Option { return new self(...$this->pass); } @@ -134,12 +135,12 @@ public function map(Closure $mapper): Option * * @param mixed $default * @psalm-param U $default - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return mixed * @psalm-return U */ - public function mapOr($default, Closure $mapper) + public function mapOr($default, callable $mapper) { return $default; } @@ -149,14 +150,14 @@ public function mapOr($default, Closure $mapper) * * @template U * - * @param Closure $default - * @psalm-param Closure(mixed...):U $default - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $default + * @psalm-param callable(mixed...):U $default + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return mixed * @psalm-return U */ - public function mapOrElse(Closure $default, Closure $mapper) + public function mapOrElse(callable $default, callable $mapper) { return $default(...$this->pass); } @@ -194,12 +195,12 @@ public function and(Option $optb): Option * * @template U * - * @param Closure $op - * @psalm-param Closure(T=,mixed...):Option $op + * @param callable $op + * @psalm-param callable(T=,mixed...):Option $op * @return Option * @psalm-return Option */ - public function andThen(Closure $op): Option + public function andThen(callable $op): Option { return new self(...$this->pass); } @@ -220,17 +221,17 @@ public function or(Option $optb): Option /** * Returns the option if it contains a value, otherwise calls op and returns the result. * - * @param Closure $op - * @psalm-param Closure(mixed...):Option $op + * @param callable $op + * @psalm-param callable(mixed...):Option $op * @return Option * @psalm-return Option * - * @throws OptionException on closure return type mismatch - * @psalm-assert !Closure():Option $op + * @throws OptionException on callable return type mismatch + * @psalm-assert !callable():Option $op * * @psalm-suppress DocblockTypeContradiction We cannot be completely sure, that in argument valid callable */ - public function orElse(Closure $op): Option + public function orElse(callable $op): Option { $option = $op(...$this->pass); @@ -261,18 +262,18 @@ public function okOr($err): Result * * @template E * - * @param Closure $err - * @psalm-param Closure(mixed...):E $err + * @param callable $err + * @psalm-param callable(mixed...):E $err * @return Result * @psalm-return Result */ - public function okOrElse(Closure $err): Result + public function okOrElse(callable $err): Result { return new Err($err(...$this->pass), ...$this->pass); } /** - * The attached pass-through args will be unpacked into extra args into chained closures + * The attached pass-through args will be unpacked into extra args into chained callables * * @param mixed ...$args * @return Option diff --git a/src/Option/Some.php b/src/Option/Some.php index dc39f1e..de80e15 100644 --- a/src/Option/Some.php +++ b/src/Option/Some.php @@ -1,4 +1,5 @@ value; } @@ -125,12 +125,12 @@ public function unwrapOrElse(Closure $op) * * @template U * - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return Option * @psalm-return Option */ - public function map(Closure $mapper): Option + public function map(callable $mapper): Option { return new self($mapper($this->value, ...$this->pass)); } @@ -142,12 +142,12 @@ public function map(Closure $mapper): Option * * @param mixed $default * @psalm-param U $default - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return mixed * @psalm-return U */ - public function mapOr($default, Closure $mapper) + public function mapOr($default, callable $mapper) { return $mapper($this->value, ...$this->pass); } @@ -157,14 +157,14 @@ public function mapOr($default, Closure $mapper) * * @template U * - * @param Closure $default - * @psalm-param Closure(mixed...):U $default - * @param Closure $mapper - * @psalm-param Closure(T=,mixed...):U $mapper + * @param callable $default + * @psalm-param callable(mixed...):U $default + * @param callable $mapper + * @psalm-param callable(T=,mixed...):U $mapper * @return mixed * @psalm-return U */ - public function mapOrElse(Closure $default, Closure $mapper) + public function mapOrElse(callable $default, callable $mapper) { return $mapper($this->value, ...$this->pass); } @@ -202,17 +202,17 @@ public function and(Option $optb): Option * * @template U * - * @param Closure $op - * @psalm-param Closure(T=,mixed...):Option $op + * @param callable $op + * @psalm-param callable(T=,mixed...):Option $op * @return Option * @psalm-return Option * - * @throws OptionException on closure return type mismatch - * @psalm-assert !Closure(T=):Option $op + * @throws OptionException on callable return type mismatch + * @psalm-assert !callable(T=):Option $op * * @psalm-suppress DocblockTypeContradiction We cannot be completely sure, that in argument valid callable */ - public function andThen(Closure $op): Option + public function andThen(callable $op): Option { $result = $op($this->value, ...$this->pass); @@ -239,12 +239,12 @@ public function or(Option $optb): Option /** * Returns the option if it contains a value, otherwise calls op and returns the result. * - * @param Closure $op - * @psalm-param Closure(mixed...):Option $op + * @param callable $op + * @psalm-param callable(mixed...):Option $op * @return Option * @psalm-return Option */ - public function orElse(Closure $op): Option + public function orElse(callable $op): Option { return $this; } @@ -269,18 +269,18 @@ public function okOr($err): Result * * @template E * - * @param Closure $err - * @psalm-param Closure(mixed...):E $err + * @param callable $err + * @psalm-param callable(mixed...):E $err * @return Result * @psalm-return Result */ - public function okOrElse(Closure $err): Result + public function okOrElse(callable $err): Result { return new Ok($this->value, ...$this->pass); } /** - * The attached pass-through args will be unpacked into extra args into chained closures + * The attached pass-through args will be unpacked into extra args into chained callables * * @param mixed ...$args * @return Option @@ -292,4 +292,4 @@ public function with(...$args): Option return $this; } -} \ No newline at end of file +}