I think the current inconsistencies are breaking the system. I would certainly not want "double optionals" to magically collapse into single optionals. So I'm not sure what you mean by that comparison.
Also, I wouldn't write all this if these inconsistencies were not noticable and stopped me from being able to write various very useful/practical/productive high level abstractions.
These inconsistencies makes me less productive and my code unnecessary complicated, full of work-arounds and special casing.
I will not continue arguing after this post, as I think my point is so obvious that it shouldn't need this much justification/motivation.
So I'll conclude by essentially repeating myself (again):
The unifying concept of tuples and parenthesized expressions in Swift is something obviously great.
- It is clearly visible in the grammar of the language (which also becomes simpler because of it).
- It unifies otherwise unnecessarily disparate concepts by being resused for things like: switch, conditional, assignments, associated values, function parameter-types and return-types, (pattern matching) etc.
- People new to the language only have to learn the rules of this concept instead of learning a whole bunch of unneccesarily unrelated concepts.
- When people have learned this concept and sees how it's reused in the language, they will discover how powerful it is and find new similarly powerful ways of reusing it in their own code constructs.
Preferring inconsistency over consistency here just because "people in general (beginners?) are probably not using this for anything much more complex than multiple returns, zipped iterators, etc" suggest a design philosophy that has taken "worse is better" to a whole new level.
The same design philosophy would probably reject eg first class functions, since people in general would probably not be using functions for anything much more complex than calling them directly.
Simple practical benefits of having this implemented in a consistent way:
- Being able to (successfully) treat parameter lists as types (what's called parameter-types in the Swift book and language grammar).
- Being able to (successfully) treat argument lists as values.
- Being able to (successfully) write protocols with associated types for the parameter type of eg an initializer.
- Being able to (successfully) write generic types that conforms to protocols of the kind mentioned above.
- And more ...
In short, again:
Inconsistency in this and many other areas ⇒ less expressive more complicated language.
Consistency in this and many other areas ⇒ more expressive less complicated language.
Note that I included the reference to "worse is better" to indicate that I'm aware of where this discussion might easily end up.