I want to retract my nitpickings on argument labels; `all(equal:)` and 
`all(match:)` are the best names for these methods.

things all match condition?
things all equal value?

If we accept `all` as a term of art (which I think we should), along with these 
labels the use site are very readable!

> On Mar 31, 2017, at 6:38 PM, Daniel Duan via swift-evolution 
> <[email protected]> wrote:
> 
> 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 
>> <[email protected] <mailto:[email protected]>> 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
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to