Re: [RFC] Partial function application

From: Date: Tue, 18 May 2021 20:51:05 +0000
Subject: Re: [RFC] Partial function application
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-114518@lists.php.net to get a copy of this message
Hi David,

On 18/05/2021 20:56, David Gebler wrote:
function foo(int $a, int $b, int ...$p) { ... } $partial = foo(?, 10); $partial(5, 15, 25); Intuitively, because the existing convention is extra unused parameters in user defined functions are silently ignored, I think I would expect the above to be equivalent to something like: $partial = fn(int $a) => foo($a, 10); $partial(5, 15, 25); // 15 and 25 are lopped off to no effect and not $partial = fn(int $a, int ...$params) => foo($a, 10, ....$params);
Did you see my message yesterday about the two mental models of the feature? https://externals.io/message/114157#114492 Your expectation there is in line with the "start with an empty closure and add things" model; the behaviour proposed in the RFC is in line with the "copy the full signature and then splice in fixed values" model. I do worry that users of the language will assume the "wrong" mental model, though, unless we pick a syntax that more clearly matches the "copy and splice" model. I think that would mean having a way to say "make this is a partial", and a way to indicate which arguments to "splice", without any "placeholders". Yet Another Bad Unsolicited Syntax Suggestion: $partial = partial foo(); // no bindings; current RFC $partial = foo(?); $partial = partial foo(b: 10); // bind named parameter $b; current RFC $partial = foo(?, b: 10); $partial = partial foo(1: 10); // bind positional parameter #1 (zero-indexed); current RFC $partial = foo(?, 10); Regards, -- Rowan Tommins [IMSoP]

Thread (68 messages)

« previous php.internals (#114518) next »