By example, a type WithCheese may make little sense.Anyway, if WithCheese only makes sense for a Sandwich, nesting WithCheese inside Sandwich is the way to go.
This doesn't help unless the *whole* hierarchy is nested in the same file. Otherwise you have to have an explicit permits clause on each of Sandwich, WIthCheese, etc.