> review of SE-0174 "Change `filter` to return an associated type" 
> 
> What is your evaluation of the proposal?
I think a change in this 'area' is valuable because currently always returning 
an array from collection operations is limiting. However I think this proposal 
feels like 'papering' over problems rather than fixing the root cause. I think 
it would be better to reject this and do two more adventurous proposals instead:

  1. Allow protocols to be generic, instead of associated types, so that you 
can write Sequence<T>
  2. Allow Self to accept a generic argument, so that you can write Self<T>

With these to, admittedly much more major changes, you can then write:

    protocol Sequence<T> {
        func filter(_ isIncluded: (T) throws -> Bool) rethrows -> Sequence<T>
        func map<M>(_ mapper: (T) throws -> M) rethrows -> Sequence<M>
    }
    extension RangeReplaceableCollection {
        func filter(_ isIncluded: (T) throws -> Bool) rethrows -> Self<T> { 
            var result = Self<T>() 
            for element in self { 
                if try isIncluded(element) { 
                     result.append(element) 
                }
            } 
           return result 
        } 
        func map<M>(_ mapper: (T) throws -> M) rethrows -> Self<M> { 
            var result = Self<M>() 
            for element in self { 
                try result.append(mapper(element))
            } 
           return result 
        } 
    }

Which I think both reads better and is more powerful since it allows map to be 
written also.

> Is the problem being addressed significant enough to warrant a change to 
> Swift?
Yes, return an array is a real pain

> Does this proposal fit well with the feel and direction of Swift?
Yes and no, really smacks of papering over other flaws. Might box Swift into a 
corner were other problems can't be fixed because the underlying, real, 
problems still remain.

> If you have used other languages or libraries with a similar feature, how do 
> you feel that this proposal compares to those?
Virtually all other languages I have used, e.g. Java, Scala, use the solution I 
presented above. 

> How much effort did you put into your review? A glance, a quick reading, or 
> an in-depth study?
Have been bitten by this and have written my own collection hierarchy to 
overcome this limitation, and others, of the current library. 

-- Howard.

> On 29 Apr 2017, at 10:06 am, Douglas Gregor <[email protected]> wrote:
> 
> Hello Swift community,
> 
> The review of SE-0174 "Change `filter` to return an associated type" begins 
> now and runs through May 3, 2017. The proposal is available here:
> 
> https://github.com/apple/swift-evolution/blob/master/proposals/0174-filter-range-replaceable.md
> Reviews are an important part of the Swift evolution process. All reviews 
> should be sent to the swift-evolution mailing list at
> 
> https://lists.swift.org/mailman/listinfo/swift-evolution
> or, if you would like to keep your feedback private, directly to the review 
> manager. When replying, please try to keep the proposal link at the top of 
> the message:
> 
> Proposal link:
> 
> https://github.com/apple/swift-evolution/blob/master/proposals/0174-filter-range-replaceable.md
> Reply text
> Other replies
> What goes into a review?
> 
> The goal of the review process is to improve the proposal under review 
> through constructive criticism and, eventually, determine the direction of 
> Swift. When writing your review, here are some questions you might want to 
> answer in your review:
> 
> What is your evaluation of the proposal?
> Is the problem being addressed significant enough to warrant a change to 
> Swift?
> Does this proposal fit well with the feel and direction of Swift?
> If you have used other languages or libraries with a similar feature, how do 
> you feel that this proposal compares to those?
> How much effort did you put into your review? A glance, a quick reading, or 
> an in-depth study?
> More information about the Swift evolution process is available at
> 
> https://github.com/apple/swift-evolution/blob/master/process.md
> Thank you,
> 
> -Doug Gregor
> 
> Review Manager
> 
> _______________________________________________
> swift-evolution-announce mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution-announce
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to