[swift-evolution] Proposal: Add SequenceType.first

Dave Abrahams dabrahams at apple.com
Thu Dec 31 02:36:08 CST 2015


> On Dec 30, 2015, at 3:57 PM, Kevin Ballard via swift-evolution <swift-evolution at swift.org> wrote:
> 
> It's sometimes useful to get the first element of a sequence. To that end I'd like to propose
>  
> extension SequenceType {
>     /// Returns the first element of `self`, or `nil` if `self` is empty.
>     /// - Complexity: O(1)
>     var first: Self.Generator.Element? {
>         var gen = generate()
>         return gen.next()
>     }
> }
>  
> I think it makes sense to add this property to the definition of SequenceType as well, so various sequences can override it to avoid constructing a generator.
>  
> With this added to SequenceType, we can remove it from CollectionType, as the behavior will be the same.

Property accesses should not mutate the receiver, and because of how Sequences work, inspecting first may consume the first element. I suggest you consider adding a BufferedSequence<Base: SequenceType> that has a stable first property (at least until it is iterated)

Another related adapter I’d like to add is a model of CollectionType that is backed by a sequence and lazily populated in fixed-sized chunks.


-Dave

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151231/e469f8bb/attachment.html>


More information about the swift-evolution mailing list