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?
>