On Wednesday, 9 July 2014 at 07:10:09 UTC, Jacob Carlborg wrote:
On 09/07/14 00:21, bearophile wrote:

9. Built-in tuples usable in all the most important situations (with a syntax that doesn't kill possible future improvements of the switch statement to perform basic pattern matching on structs that have an
optional method named "unapply").

I think it would be possible to implement pattern matching in library code. Something like this:

match!(value,
    (int t) => ifInt(),
    (char t) => ifChar(),
    () => noOtherMatch()
);

Destructing a type could look something like this:

match(value,
(type!(Foo), int a, int b) => doSomething(), // match if value is of type Foo and extract it (int a, int b) => doSomething() // match anything that can be destructed to two ints
);

The syntax is not so pretty but I think it would be possible.

As far as I know, there's no reason we can't add pattern matching to switch or final switch or both. There's no ambiguity because right now it's not possible to switch on structs or classes. See Kenji's DIP32 for syntax for tuples that could be leveraged.

Reply via email to