nit: should these names be `all(matching)`/`all(equalTo)` per API Design 
Guidelines?
> On Mar 31, 2017, at 8:28 AM, Ben Cohen via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Hi,
> 
> A short proposal for you as part of the algorithms theme. Hopefully 
> non-controversial, aside from the naming of the method and arguments, about 
> which controversy abounds. Online copy here: 
> https://github.com/airspeedswift/swift-evolution/blob/9a778e904c9be8a3692edd19bb757b23c54aacbe/proposals/0162-all-algorithm.md
>  
> <https://github.com/airspeedswift/swift-evolution/blob/9a778e904c9be8a3692edd19bb757b23c54aacbe/proposals/0162-all-algorithm.md>
> 
> 
> Add an all algorithm to Sequence
> 
> Proposal: SE-NNNN 
> <file:///Users/ben_cohen/Documents/swift-evolution/proposals/0162-all-algorithm.md>
> Authors: Ben Cohen <https://github.com/airspeedswift>
> Review Manager: TBD
> Status: Awaiting review
> Introduction
> 
> It is common to want to confirm that every element of a sequence equals a 
> value, or matches a certain criteria. Many implementations of this can be 
> found in use on github. This proposal adds such a method to Sequence.
> 
> Motivation
> 
> You can achieve this in Swift 3 with contains by negating both the criteria 
> and the result:
> 
> // every element is 9
> !nums.contains { $0 != 9 }
> // every element is odd
> !nums.contains { !isOdd($0) }
> but these are a readability nightmare. Additionally, developers may not make 
> the leap to realize contains can be used this way, so may hand-roll their own 
> for loop, which could be buggy, or compose other inefficient alternatives:
> 
> // misses opportunity to bail early
> nums.reduce(true) { $0.0 && $0.1 == 9 }
> // the most straw-man travesty I could think of...
> Set(nums).count == 1 && Set(nums).first == 9
> Proposed solution
> 
> Introduce two algorithms on Sequence which test every element and return true 
> if they match:
> 
> nums.all(equal: 9)
> nums.all(match: isOdd)
> Detailed design
> 
> Add the following extensions to Sequence:
> 
> extension Sequence {
>   /// Returns a Boolean value indicating whether every element of the sequence
>   /// satisfies the given predicate.
>   func all(match criteria: (Iterator.Element) throws -> Bool) rethrows -> Bool
> }
> 
> extension Sequence where Iterator.Element: Equatable {
>   /// Returns a Boolean value indicating whether every element of the sequence
>   /// equals the given element.
>   func all(equal element: Iterator.Element) -> Bool
> }
> Source compatibility
> 
> This change is purely additive so has no source compatibility consequences.
> 
> Effect on ABI stability
> 
> This change is purely additive so has no ABI stability consequences.
> 
> Effect on API resilience
> 
> This change is purely additive so has no API resilience consequences.
> 
> Alternatives considered
> 
> Not adding it.
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

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

Reply via email to