Thanks Brent for your in-depth response - I've responded in another thread so we don't pollute this one (sorry Jonathan): http://thread.gmane.org/gmane.comp.lang.swift.evolution/14665
I think mapValues is great, and really needed in Swift. I'm a definite +1 on a version of map that only maps the values. On Sat, Apr 16, 2016 at 7:56 AM, Brent Royal-Gordon <[email protected]> wrote: > > This is a clarification on what I meant (I haven't had much time to test > it, but I think it's representative): > > > > https://gist.github.com/therealbnut/c223d90a34bb14448b65fc6cc0ec70ac > > There are a number of problems with this: > > * Given just an `Index`, you need to be able to calculate the next > `Index`, and check if it lies before the `endIndex`. The complexity of this > is hidden in your example because you're relying on a traditional > `DictionaryIndex` to perform these tasks. Thus, the `Index` type in your > dictionary design would be some sort of wrapper-around-the-key, not the key > itself. That's the source of the `subscript(_: Index) -> Value` which > apparently confused you. > > * Generic `SequenceType` and `CollectionType` operations now use only the > values, not the keys and values. That means that `Array(newDictionary)` > gets you an array of values, `filter` returns an array of values, `reduce` > operates only on the values, etc; all of these operations throw away the > keys. That's not necessarily wrong, but I'm not sure that you're aware of > it. > > * Your `map` is overloading `SequenceType.map` merely by return type. That > means you can no longer assign it directly to a newly-declared variable, or > use it in many other contexts where the type has to be inferred. > > * Your `enumerate` is similarly overloading by return type. It's also > further confusing an already confused semantic. `enumerate` does not pair > elements with their indices; it pairs them with integers starting at zero. > This *happens* to correspond to their array indices, but that's not > necessarily true of any other Collection. (I'm going to start another > thread about this.) > > Basically, in this conception of Dictionary: > > * The keys are disposable and the values are the important part—most > operations on a Dictionary would throw away the keys and use only the > values. > * Index still would not be a Key—it would be some kind of instance which > wrapped or converted into a Key. > * You still would need to name Dictionary-creating `map` and similar > functions differently from their Array-generating cousins. > * Iterating over keys and values together would require some kind of > Dictionary-specific API, not something that was available on other > collections or sequences. > > Maybe that would be an improvement, but I'm skeptical. > > -- > Brent Royal-Gordon > Architechies > >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
