On Tue, Nov 7, 2017, at 05:23 PM, Tino Heth via swift-evolution wrote:
> -1
> 
> I guess breaking existing code will be the show stopper for this
> proposal — but I generally think that compatibility is a poor
> rationale to stop an improvement, so my personal reasons are
> different:> The name is just wrong.
> Just have a look at this simple example
> 
> extension Int {
>     func justImagineError() throws -> Int {
>         return self
>     }
> }
> 
> let ints: [Int?] = [nil]
> 
> let result = ints.flatMap {
>     return try? $0?.justImagineError()
> }
> print(result)
> 
> If flatMap would really filter out nil values, this should yield an
> empty array as result — but the actual output is *[nil]*
flatMap does filter out nil values. The problem is the return type of
your block is `Int??`, not `Int?`, so it's stripping off the outer layer
of optionals. Your example here is akin to one where your block returns
`[[[Int]]]` and asking why your resulting type is `[[Int]]`.
-Kevin Ballard
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to