Re: [RFC] Pipe Operator (again)

From: Date: Tue, 03 Jun 2025 02:25:18 +0000
Subject: Re: [RFC] Pipe Operator (again)
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-127547@lists.php.net to get a copy of this message
On Mon, Jun 2, 2025, at 3:41 PM, Dmitry Derepko wrote:
> Hi Larry!
>
>
>
> It's been a long, long way to get this feature, awesome work.
>
>
>
> Have you considered adding a compose function that does the same thing 
> but in the classic PHP function style?
>
>
>
> There's not much difference between the new style:
>
>
>
>
>
> $processor = fn ($data) => htmlentities($data)
>
>     |> str_split(...),
>
>         |> fn($x) => array_map(strtoupper(...), $x),
>
>         |> fn($x) => array_filter($x, fn($v) => $v != 'O’);
>
>
>
> and the old one:
>
>
>
> $processor = compose(
>
>     htmlentities(...),
>
>     str_split(...),
>
>     fn ($x) => array_map(strtoupper(...), $x),
>
>     fn ($x) => array_filter($x, fn ($v) => $v != 'O'),
>
> );
>
>
>
> But the classic looks better when you create real pipes. 
>
>
>
> I’ve created examples with comparison.
>
>
>
> https://3v4l.org/jY0Vg
>
> https://3v4l.org/87Sj2
>
> https://3v4l.org/4EE6b
>
>
>
>
>
> New syntax just makes code shorter, but the compose function still have 
> benefits:
>
> - it will be able to add a polyfill for older versions
>
> - it will be possible to write the first function without passing the 
> first argument ($data in the "fn ($data) => htmlentities($data)”)
>
> - it will be possible to re-use the compose function along with the new 
> operator $data |> compose(…$functions)

Pipe and compose are importantly different operations.  I've had user-space implementations of
both available for years in crell/fp:  https://github.com/Crell/fp/blob/master/src/composition.php

I'd love to have a compose operator natively in PHP, too.  The RFC for that is already written,
just needs code.  I hope to formally propose it soon:  https://wiki.php.net/rfc/function-composition

--Larry Garfield


Thread (42 messages)

« previous php.internals (#127547) next »