These would not be my expectations. Rather, the issue (once again!) is
parametricity vs partial parametricity. If a function takes any first class
value as argument and treats it the same way, I'd expect it to be declared
"any". If a function takes any first class value as argument, but then case
switches its behavior depending on whether the value was undefined, I would
expect it to be declared as "optional any".
For example, although aMap.set(aKey, undefined) means the same thing as
aMap.set(aKey), .set's length should be 2 and its second parameter should
not be considered optional.
On Wed, Feb 19, 2014 at 9:19 AM, Domenic Denicola <
domenic@domenicdenicola.com> wrote:
> At first glance, to me, "any" would mean "anything except `undefined`" and
> "optional any" would mean "anything, including `undefined` to trigger
> defaults."
>
> I'm not sure if that's useful in practice, though.
>
> ________________________________________
> From: Boris Zbarsky <bzbarsky@MIT.EDU>
> Sent: Wednesday, February 19, 2014 12:17
> To: Allen Wirfs-Brock; Mark S. Miller
> Cc: public-script-coord@w3.org
> Subject: Re: Removing the concept of "optional any"
>
> On 2/19/14 12:15 PM, Allen Wirfs-Brock wrote:
> > if you were defining such a function in ES6, you might either write:
> >
> > function f(arg) { } //this feels like 'any arg'
> > //f.length is 1
> >
> > or
> >
> > function f(arg=undefined) {} //this feels like 'optional any arg'
> > // f.length is 0
>
> That's true.
>
> I suppose we could keep allowing "any" and "optional any" but have them
> processed exactly the same way (basically special-casing "optional"
> processing for "any") except for the .length behavior... That said,
> would we still want the argc check in that case?
>
> -Boris
>
>
--
Cheers,
--MarkM