On Sat, Jul 17, 2021, at 9:48 AM, Marco Pivetta wrote:
> Hey Larry,
>
> I just voted "NO" on this: it took me a long time to decide, because I've
> been vouching for pipe-alike operators myself for a while.
>
> The reason why I voted "no" is that this is feasible with a `pipe(callable
> $first, callable ...$piped)` function, without having to add syntax/AST for
> it.
>
> Type safety for such a closure would still be very messy, but feasible with
> some macro-based templating of docblocks.
>
> The simplistic approach to this is simple composition (the `.` you
> mentioned):
>
> ```php
> /**
> * @template TIn of mixed
> * @template TOut of mixed
> *
> * @param callable(TIn): TIntermediate $first
> * @param callable(TIntermediate): TOut $piped
> *
> * @return callable(TIn): TOut
> * @return TOut
> */
> function pipe(callable $first, callable $piped): callable
> {
> }
> ```
>
> Pol Dellaiera (https://github.com/drupol) has done a lot of work around
> this stuff, specifically the type inference bit, in
> https://github.com/loophp/combinator , so I see hope to get better types at
> a later stage.
>
> Therefore:
>
> * userland runtime **implementation** is trivial
> * userland type-safe definition is non-trivial, but not insurmountable
>
>
> Marco Pivetta
Hi Marco. Thank you for your explanation, even if I naturally disagree.
Out of curiosity, what sort of additional power/capability/flexibility/etc.
would, in your mind, justify pipe or similar being a native feature? PHP has a
*ton* of native features that *could* be done in user space, or are simply
syntax sugar, but still wildly popular and useful as native syntax. What is
your heuristic for that?
(The fact that there are 3-4 user space implementations of pipe-like behavior,
all incompatible, is one of the reasons why I think standardizing it into a
common core syntax *is* a good idea, though I know others disagree.)
--Larry Garfield
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php