> On 22 Jul 2016, at 20:43, Jacob Bandes-Storch <jtban...@gmail.com> wrote:
> 
>> On Fri, Jul 22, 2016 at 8:35 AM, Ben Rimmington <m...@benrimmington.com> 
>> wrote:
>> 
>>> On 22 Jul 2016, at 02:46, Jacob Bandes-Storch wrote:
>>> 
>>> In the swift-lang Slack channel, a few of us were discussing 
>>> joined(separator:) and realized that flatten() does almost exactly the same 
>>> thing.
>>> 
>>> Is there interest in renaming flatten() to joined()?  Since joined takes a 
>>> separator that's any Sequence, we can't have a default value for the 
>>> separator parameter, but we can have a variant of joined() with no 
>>> arguments.
>> 
>> I'd like default separators for the joined() methods.
>> 
>> <https://bugs.swift.org/browse/SR-1428>
>> 
>> But renaming flatten() to joined() seems complicated.
>> 
>> <https://github.com/apple/swift/blob/master/stdlib/public/core/Flatten.swift.gyb>
>> <https://github.com/apple/swift/blob/master/stdlib/public/core/Join.swift>
> 
> What makes it seem complicated? At the very least, one could just rename the 
> flatten() function. There might also be an opportunity to combine the two 
> files and delete some code from stdlib.

There's only one joined() method (for a sequence of sequences):

        extension Sequence {
          func joined<Separator: Sequence>(separator: Separator) -> 
JoinedSequence<Self>
        }

There are many flatten() methods (`where` clauses omitted for brevity):

        extension Sequence {
          func flatten() -> FlattenSequence<Self>
        }

        extension LazySequenceProtocol {
          func flatten() -> LazySequence<FlattenSequence<Self.Elements>>
        }

        extension LazyCollectionProtocol {
          func flatten() -> LazyCollection<FlattenCollection<Self.Elements>>
        }

        extension Collection {
          func flatten() -> FlattenCollection<Self>
        }

        extension BidirectionalCollection {
          func flatten() -> FlattenBidirectionalCollection<Self>
        }

So it's not a simple one-to-one rename.

When there's no `separator` argument, will FlattenIterator perform better than 
JoinedIterator?

>> And what would happen to the flatMap() methods? Is flatten() a term of art?
>> 
>> <https://github.com/apple/swift/blob/master/stdlib/public/core/FlatMap.swift>
> 
> I'd say flatMap is more a "term of art" than flatten. "flatten" just 
> describes literally what is being done. Frankly I'm surprised it was never 
> named flattened(). Anyway, flatMap should stay.

## Future directions

Will the flatMap(_:) methods also have flatMap(separator:_:) variants?

-- Ben

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

Reply via email to