<div dir="ltr">On Fri, Mar 31, 2017 at 8:28 AM, Nate Cook via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="auto" style="word-wrap:break-word"><div style="word-wrap:break-word"><div style="word-wrap:break-word"><div style="word-wrap:break-word"><div style="word-wrap:break-word"><div style="word-wrap:break-word"><div style="word-wrap:break-word"><div style="word-wrap:break-word"><div>Hello everyone!</div><div><br></div><div>Here is a draft proposal to fill in some usability gaps in the standard library Dictionary and Set types. I&#39;d love to hear any feedback from the list before submitting this as a PR.</div><div><br></div><div>Thanks!</div><div>Nate</div></div></div></div></div></div></div></div></div></blockquote><div><br></div><div>&lt;snip&gt;</div><div><br></div><div>Nate, in general, I like these changes very much. They would definitely be worthwhile additions. The two things I&#39;d like to comment on are as follows:</div><div><br></div><div>First, I wonder whether either `first(_:_:)` and `last(_:_:)` or the proposed alternative holds their weight. Neither is more succinct than `{ $0 }` or `{ $1 }`, which does what it says very clearly *and* don&#39;t require any discovery. I don&#39;t think users, in the moment, would be stumped as to how to write such a closure, nor that any reader would be confused about what the closure does:</div><div><br></div><div>```</div><div>let firstWins = Dictionary(merging: duplicates, resolvingCollisionsWith: { $0 })</div><div>```</div><div><br></div><div>Second, although the proposed `Dictionary.filter` would be an improvement on its own, I wonder if it is as valuable after implementation of part 1. That is, with only implementation of part 1, you&#39;d have the ability to write `Dictionary(numbers.filter {...})!` to get a dictionary after filter.</div><div><br></div><div>There are optimization opportunities left on the floor here, certainly, but I&#39;d expect `Dictionary(numbers.lazy.<wbr>filter {...})!` could recover those opportunities if it matters. I just worry about the API confusion that comes from two `filter` operations that return different types, the impact on current source, as well as its inconsistency with `map` and `reduce`.</div><div><br></div><div><br></div></div><br></div></div>