Variants/case classes/algebraic data types/sums/oh my! (original) (raw)

Brian Goetz brian.goetz at oracle.com
Sun Jun 12 15:46:26 UTC 2016


I think the bulk of it was being able to specify in class metadata that a class/interface is sealed (perhaps just ACCSEALED) and that it has a given list of immediate child classes (we don't need to talk about the entire set of descendants of a class, as implementing matching seems to only require going one inheritance step deep at a time). This seems to be covered in a more general form in the nestmates proposal, so maybe I won't actually need to implement much!

The nestmate proposal doesn't (yet) discuss sealing in detail, but the concept is pretty simple: sealing is a generalization of finality which says "may only be extended by members of the same nest." Since nests will probably map 1:1 to compilation units, this covers most ADT situations pretty cleanly. Extending sealing to interfaces is an additional step, but works the same way -- we have to insert the word "direct" into the rule ("may only be directly implemented by members of the same nest".) There are some more details to work out, of course, but this is just to say that nestmates enable sealing in a fairly straightforward way.



More information about the valhalla-dev mailing list