,
> i've hinted that there is an issue with intersection type and totality, but 
> we did not follow up.
> 
> Here is the issue
> var value = flag? "foo": 42;
> switch(value) {
>  case String s -> ...
>  case Integer i -> ...
>  case Serializable s ->
>  case Comparable<?> c ->  
> }
> 
> given that the type of value is an intersection type Serializable & 
> Comparable<?> & ...
> the last two cases are total with respect to the type of value. which does 
> not go well with the current semantics that can only have one total case.

Let’s separate the issues here.  The type involved is an infinite type, which I 
think we can agree is a distraction.  But lets assume the type of value were 
Serializable&Comparable (S&C for short.)  

Because S&C <: S, the `case S` in your example is already total, so the `case 
C` should be a dead case and yield a compilation error.  According to the rule 
we have, `case S` is total on any U <: S, so it is total on S&C, so the current 
model covers this, and the `case C` is identified as dead by the compiler.  
Which makes sense because there’s no value it can match.

I’m not seeing the problem?

Reply via email to