Andreas Rossberg wrote:
(Refutable: a pattern that may fail to match, raising an error; irrefutable: a pattern that is matched by anything, but potentially by binding nullish values to pattern variables.)

(That is indeed the definition we all share -- thanks.)

The current draft tries to make all/most destructuring patterns irrefutable. The above equivalence is the motivation (though not the "definition" of irrefutable).

Sure (I didn't write "definition"). That motivation comes from JS as it is today, without pattern matching.

I understand that motivation, but was trying to point out that it is merely one under several (conflicting) potential equivalences to consider. For example, in languages with pattern matching I usually have

  let pat = exp; stats
  ~=
  match (exp) { case pat: stats }

(Assuming a match without a default throws, otherwise add an explicit error default.)

IMHO this equivalence would be much more important, because it is necessary for giving a uniform meaning to patterns per se.

If only JS had pattern matching!

We may add pattern matching, but does that future possibility make the equivalence you cite more important than the one JS programmers might expect today?

We could try to have our cake and eat it, by extending the pattern language with prefix-! or prefix-?. Which prefix depends on the choice of default behavior, based on ranking of the two equivalences. Whatever that ranking, does this make sense so far?

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to