> 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
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to