On Wed, Jul 19, 2023, at 12:08 PM, Olle Härstedt wrote:
> 2023-07-18 18:50 GMT+02:00, Larry Garfield <la...@garfieldtech.com>:
>> On Tue, Jul 18, 2023, at 4:47 PM, Olle Härstedt wrote:
>>
>>> Any comment on a pipe (or piped process) as a first-class value? When
>>> you use |> the functions are immediately applied, which might not be
>>> what you want. You can lazify it by wrapping it in a lambda, but I
>>> think that decreases the value of the pipe concept in itself. One
>>> strength is the ability to split the decision about what to glue
>>> together from the decision on how to execute it. You kinda get some
>>> light-weight metaprogramming ability that way.
>>>
>>> Well i guess such a pipe-concept is pretty far removed from the simple
>>> pipe operator. :) And also already possible with existing OOP
>>> concepts, callable classes, and now the (...) syntax.
>>
>> That's the function concat operator I have been mentioning.  Concat can be
>> implemented in terms of pipe, and pipe can be implemented in terms of
>> concat, but I'd rather have both natively.
>>
>> For more on my thoughts there, see:
>> https://peakd.com/hive-168588/@crell/aoc2021-review
>
> Right, I think I was thinking more of the pipeline design pattern than
> the pipe operator. The concat operator will tell you THAT two
> functions have been glued together, but you have no way to affect HOW
> they are glued together. With the pipeline design pattern, you do: For
> example, you could add a logger that logs each input and output in the
> Pipe class without much hassle.
>
> The pipeline design pattern could still greatly benefit from some of
> these RFCs tho, especially partial function application, I think.
>
> Olle

OK, terminology mismatch.  What you're calling "pipeline design pattern" I'm 
calling "that's literally what a monad is." :-)  (More precisely, monads are 
the mathematical rules that a "fancy function concatenation" operation has to 
follow in order to still be composable cleanly.  You could make pipeline-like 
things that don't follow those rules, but they'd be less useful.)

Your logging example is literally the "writer monad," one of the standard monad 
examples.

--Larry Garfield

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to