On Mon, Jan 23, 2023 at 6:31 PM Larry Garfield <la...@garfieldtech.com> wrote:
>
> On Mon, Jan 23, 2023, at 10:53 AM, Ollie Read wrote:
> > There's definitely similarity, but I would say it sits somewhere
> > between the two. Rather than reference a partial method call, or create
> > a closure for a method, you're delaying a method call. Or rather,
> > referencing a method. We have the ::class pseudo property, so I see
> > this like an equivalent, but for methods.
>
> So what you're really looking for is a shorter way to write this:
>
> foo(fn(Str $s) => $s->beep());
>
> Now you're definitely in the realm of PFA, pipes, and that kind of 
> functionality.  And, sadly, Internals has shown a great deal of resistance to 
> that kind of functionality.  I have a user-space implementation of pipes that 
> includes utilities to do something similar[1], but most functional languages 
> I know also don't have a really strong native way to "turn around" a call 
> like that.
>
> I'd love a solution for that, but so far it has proven both elusive and 
> controversial.
>
> --Larry Garfield
>
> [1] https://github.com/Crell/fp/blob/master/src/object.php#L28
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>

Speaking of partial application, it'd be amazing if it were available
with the current closure syntax:

$func = fn($x, $y, $z) => echo $x + $y + $z;
$plus1 = $func(..., 1);
$plus2n1 = $func(2, 1, ...);

$a = $plus1(1, 2);
$b = $plus2n1(5);

I spent a few days last summer trying this out, but couldn't get the
grammar parser to accept it. I think I have a local branch if someone
would be willing to work on it with me. At least point me in the right
direction. I don't have much free time these days, but it is certainly
doable.

Robert Landers
Software Engineer
Utrecht NL

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

Reply via email to