Sent from my iPad

> On May 24, 2016, at 11:34 AM, Nate Cook <[email protected]> wrote:
> 
> 
>> On May 24, 2016, at 7:43 AM, Matthew Johnson via swift-evolution 
>> <[email protected]> wrote:
>> 
>> Sent from my iPad
>> 
>> On May 24, 2016, at 12:59 AM, Brent Royal-Gordon via swift-evolution 
>> <[email protected]> wrote:
>> 
>>>> I have a small remark though, wouldn’t it be better to let transform be of 
>>>> type (Key, Value) throws -> T instead of (Value) throws -> T? You can just 
>>>> ignore the key (with _) if you don’t need it, but I think it might come in 
>>>> handy in some cases.
>>> 
>>> The problem is, that closes the door to writing many simple maps in 
>>> functional style. For instance, this:
>>> 
>>>  dictionaryOfNumbers.mapValues(abs)
>>> 
>>> Would have to become this:
>>> 
>>>  dictionaryOfNumbers.mapValues { _, v in abs(v) }
>>> 
>>> (It *might* be possible to do it with `$1`, but I'm not sure; there are 
>>> some limitations around that.)
>>> 
>>> A value-value map is just simpler and cleaner, while almost always giving 
>>> you what you need.
>> 
>> +1.  
>> 
>> I don't think I have ever mapped keys.  Incidentally, that doesn't have the 
>> usual semantics of a map operation as you can produce duplicate keys.
> 
> I think this conversation suffers from not knowing whether Dictionary is 
> going to receive a sequence-based initializer. There's been a proposal for 
> that in the PR queue for quite a while. Could someone in the core team please 
> either merge or close that proposal?
> 
> https://github.com/apple/swift-evolution/pull/125
> 
> If there's no sequence-based init, mapValues should probably produce a new 
> Dictionary. If there is, having mapValues produce a dictionary would be 
> redundant. I'd rather see a MapDictionary type that wraps a dictionary and 
> only evaluates the transformation on access, rather than eagerly allocating 
> storage and performing all the transformations.

The eager vs lazy issue has already been discussed.  Why not support both and 
let the user decide?

The best approach to laziness is to introduce a Map protocol that allows us to 
have lazy maps of various kinds, as we do with sequences and protocols.  That 
seems out of scope for Swift 3.  But there is no reason it should delay an 
eager method.

> 
> You can take a look at a rudimentary MapDictionary in this gist: 
> https://gist.github.com/natecook1000/7cfc5c04f18237066f7aca6e9658f276
> 
> Best,
> Nate
> 
>>> -- 
>>> Brent Royal-Gordon
>>> Architechies
>>> 
>>> _______________________________________________
>>> 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
> 

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

Reply via email to