I agree that we should think about it. You might be interested in this point in 
the research/design space:

https://www.microsoft.com/en-us/research/publication/generalized-algebraic-data-types-and-object-oriented-programming/

Regards,
Gavin
Sent from my iPad

> On 1 Aug 2017, at 16:17, Andrey Breslav <andrey.bres...@jetbrains.com> wrote:
> 
> Hi,
> 
> Since we are looking into pattern matching for Java, I think we should 
> explore carefully even those features that look more exotic and may never end 
> up in the final design. Generalized Algebraic Data Types (GADTs) represent an 
> example of this kind of feature.
> 
> Here's a quick and fairly nice description of the feature and some issues 
> related to it that arose in Scala: 
> https://gist.github.com/smarter/2e1c564c83bae58c65b4f3f041bfb15f
> 
> To recap, we are basically looking at this kind of code:
> 
> class Expr<T>
> class IntExpr(Integer i) extends Expr<Integer> {}
> class BoolExpr(Boolean b) extends Expr<Boolean> {}
> 
> <T> T eval(Expr<T> e) {
>     switch (e) {
>         case IntExpr ie: return ie.i; // Infer T=Integer, so OK to return i
>         case BoolExpr be: return be.b; // Infer T=Boolean, so OK to return b
>     }
>     ...
> }
> 
> So, the gist of it is that sometimes we can infer the type variables if a 
> dynamic type test has succeeded. Same would work for if-match .
> 
> I see the following questions here:
> 1. Should we have this in Java at all? It may be a bit more magic than we are 
> used to having in Java
> 2. Most issues related to GADTs that I'm aware of arise in the realm of 
> structural types, i.e. functional languages or declaration-site variance 
> (which Java luckily doesn't have today), but we'd have to look very carefully 
> at Java generics to make sure this sort of thing won't blow up anywhere 
> around wildcards and/or recursive type bounds, for example.
> 
> Observation: if we answer "yes" to 1), then this behaviour should be added as 
> soon as we add any pattern matching, because even the most limited form of 
> matching includes it. It seems to me that adding this later will be a 
> breaking change.
> -- 
> Andrey Breslav
> Project Lead of Kotlin
> JetBrains
> http://kotlinlang.org/
> The Drive to Develop

Reply via email to