Totality is a term that language designers like, but may not be all that 
evocative to users.  So switch-total might not exactly turn on the light bulb 
for them.  In this manner, “sealed” has a useful connotation that has nothing 
to do with sealed types: non-leakiness: a sealed switch doesn’t leak any 
unprocessed values! 

Test driving ...

    sealed switch (x) { … }
    sealed-switch (x) { … }
    switch-sealed (x) { … }

“A switch may be sealed with the sealed modifier; expression switches are 
implicitly sealed.  The set of case patterns for a sealed switch must be total 
with some remainder; synthetic throwing cases are inserted for the remainder.”  

> On Aug 31, 2020, at 9:25 AM, Brian Goetz <[email protected]> wrote:
> 
> I think this is the main open question at this point.  
> 
> We now have a deeper understanding of what this means, and the shape of the 
> remainder.  Totality means not only “spot check me that I’m right”, but also 
> “I know there might be some remainder, please deal with it.”   So totality is 
> not merely about type checking, but about affirmative handling of the 
> remainder.  
> 
> Expression switches automatically get  this treatment, and opting _out_ of 
> that makes no sense for expression switches (expressions must be total), but 
> statement switches make sense both ways (just like unbalanced and balanced 
> if-else.)  Unfortunately the default has to be partial,  so the main question 
> is, how  do we indicate the desire for totality in a way that is properly 
> evocative for the user?  
> 
> We’ve talked about modifying switch (sealed switch), a hyphenated keyword 
> (total-switch), a trailing modifier (switch case), and synthetic cases 
> (“default: unreachable”).  Of course at this point it’s “just syntax”, but I 
> think our goal should be picking something that  makes it obvious to users 
> that what’s going on is not merely an assertion of totality, but also a 
> desire to handle the remainder.  
> 
>>    - How does a switch opt into totality, other than by being an expression 
>> switch?
> 

Reply via email to