>Вторник, 14 декабря 2021, 12:21 +03:00 от Rowan Tommins 
><rowan.coll...@gmail.com>:
> 
>On 13/12/2021 23:12, Kirill Nesmeyanov wrote:
>> I'll add that leading optional parameters are needed to implement currying 
>> and partial application.
>>
>> ```
>> function foo(int $opt = 42, int $req) {}
>>
>> $foo = curry(foo(...), 23);
>>
>> // $foo = fn($opt = 42, $req = 23);
>> ```
>
>
>I'm confused what the optional parameter is doing here - is it just to
>avoid telling the curry function which argument you're fixing? And
>wouldn't both currying and partial application result in a
>single-argument closure there, not just making both parameters optional?
>
>I would expect it to look something like this:
>
>
>```
>function foo(int $a, int $b) {}
>
>$foo = partial(foo(...), 23, 0);
>
>// $foo = fn($b) => foo(23, $b);
>
>$foo = partial(foo(...), 23, 1);
>
>// $foo = fn($a) => foo($a, 23);
>
>$bar = curry(foo(...));
>
>// $bar = fn($a) => fn($b) => foo($a, $b);
>```
>
>
>> While this is not a popular practice in PHP, this deprecation notification 
>> «breaks» all code that uses functional pradigm/concepts.
>
>That's clearly an exaggeration; it's clearly possible to write
>functional-style code without making use of this particular trick. If it
>is a *common* trick, then that's worth considering, but it would be good
>to see some evidence of that.
>
>Regards,
>
>--
>Rowan Tommins
>[IMSoP]
>
>--
>PHP Internals - PHP Runtime Development Mailing List
>To unsubscribe, visit:  https://www.php.net/unsub.php
 
Yep, you rightly noticed, I gave an example completely incorrectly.

I got acquainted with this approach with the reverse order of arguments by 
default while studying lambda calculus, but now I can no longer remember in 
what cases they are used =\

Sry for that.
 
--
Kirill Nesmeyanov
 

Reply via email to