[swift-evolution] ? suffix for <, >, <=, >= comparisons with optionals to prevent subtle bugs

Al Skipp al_skipp at fastmail.fm
Wed Dec 9 05:10:29 CST 2015

> To me it seems logical that comparing Optional<Int> with Int (or another
> Optional<Int>), if it's allowed at all, should return Optional<Bool>. Since
> conditional statements only accept Bool, the user is forced to handle the
> nil case explicitly.
I disagree that comparing Optional values should have a return value of Optional<Bool>.
If the following were to be true:

.None < .Some(0) == .None

Then logically, this would be too:

[] < [1,2,3] == []

I think most people would agree that the correct result to that comparison should be ‘true’, not [].

When comparing ‘container’ types I think it’s important to have a simple Bool result, otherwise things get very peculiar (conceptually the Optional type is really just a container with a maximum count of 1).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151209/d6ef1c45/attachment.html>

More information about the swift-evolution mailing list