Intersection types in patterns

Tagir Valeev amaembo at gmail.com
Sat Oct 20 05:58:24 UTC 2018


Hello!

It seems that sometimes it could be useful to have intersection types
in patterns. Assuming
interface Foo { void foo(); }
interface Bar { void bar(); }

one might want to match `obj instanceof (Foo & Bar) foobar` to be able
to call both `foo()` and `bar()`. After all we can now declare `var
foobar = (Foo & Bar) obj`.

Another interesting case is when LHO of matching operator is not
assignable from pattern type. Like `if (getFoo() instanceof Bar bar) {
bar.bar(); bar.foo(); }`. We know that getFoo() returns Foo, thus bar
is Foo as well. Probably it's type could be narrowed to the (Foo &
Bar) intersection automatically.

I'm not sure whether there are many usecases for this, but probably it
worth exploring.

With best regards,
Tagir Valeev.


More information about the amber-spec-experts mailing list