>Вторник, 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