> 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