> Le 13 nov. 2017 à 04:35, Brent Royal-Gordon via swift-evolution 
> <swift-evolution@swift.org> a écrit :
> 
>> On Nov 8, 2017, at 9:29 PM, Paul Cantrell via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> The problem in the Doodads example is that the name flatMap is used to 
>> identify two distinct intents: concatenating arrays and filtering nils. One 
>> can argue that those two operations are, in some lofty abstract sense, if 
>> you squint, two instances of some more general pattern — but I don’t think 
>> it’s fair to say that they represent the same intent. These separate intents 
>> deserve separate names.
> 
> I think that's the crux of it.
> 
> I think we might be better off renaming the maps on `Optional` and then 
> naming the `Sequence` operation analogously. For instance:
> 
>       Optional.map(transform) => Optional.pass(to: transform)
>       Optional.flatMap(transform) => Optional.chain(to: transform)
> 
> Then this would be a natural choice:
> 
>       Sequence.flatMap(transform) => Sequence.chainMap(transform)
> 
> Alternatively, we could think of a name for "removing optionality from a 
> sequence" and then use that name. For example, borrowing a name from Ruby:
> 
>       (Sequence where Element == T?).compact()
>       Sequence.compactMap(transform)
> 
> Actually, "unwrapped" might be a better name than "compact", since we use 
> that term.

`unwrap` is in the air, I agree. Before I suggested compactMap as well, above, 
I had a look at the RxSwift method name for filtering out nils from observable 
sequences. It is defined in RxSwiftExt, and named `unwrap`: 
https://github.com/RxSwiftCommunity/RxSwiftExt#unwrap 
<https://github.com/RxSwiftCommunity/RxSwiftExt#unwrap>

Yet I wouldn't follow that precedent. As Erica Sadun has told us, there is 
something interesting in "unwappable" types. It's a clear concept. Yet it 
applies to *values*, not *collections*: Optional.unwrapped, Result.unwrapped, 
but not Array.unwrapped. Optional<Array<Result>>.unwrapped().unwrapped() is a 
conceptual mess.

The functional vocabulary does not help us much, here. What about calling a 
spade a spade? "Filtering out nils" is not general enough to fit in the 
functional landscape, but it happens to be a concept that has is clear, useful, 
and stand-alone. "Compact" fits this precise niche very well.

Gwendal Roué

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to