> On Mar 16, 2016, at 12:39 PM, Joe Groff <[email protected]> wrote:
> 
> 
>> On Mar 9, 2016, at 8:47 PM, Chris Lattner via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> This is a minimal proposal for introducing type aliases into Swift, and 
>> intentionally chooses to keep them limited to being “aliases”.  As such, 
>> additional constraints are not allowed in this base proposal, e.g. you can’t 
>> write:
>> 
>>     typealias StringDictionary<T where T : Hashable> = Dictionary<String, T>
>> 
>> Otherwise, generic type aliases follow the model of type aliases and the 
>> precedent of the other generic declarations in Swift.  For example, they 
>> allow the usual access control features that type aliases support.  
>> Similarly, like non-generic type aliases, generic type aliases cannot be 
>> “resilient”.
> 
> Can we at least infer existing constraints from the aliased type? For 
> example, in something like:
> 
> typealias FakeSet<T> = Dictionary<T, ()>
> 
> you'd need to propagate the `T: Hashable` constraint from `Dictionary`'s 
> first parameter to the typealias for it to be sound.

Since writing the proposal up (and since discussing it with you), I have come 
around to disagree with the proposal as I wrote it.  Specifically, I think that 
constraints of the aliasee *should* be specified in the typealias declaration.  
You should be required to write:

        typealias DictionaryOfString<T : Hashable> = Dictionary<T, String>

We shouldn’t infer it the requirement.

Rationale: I see this as analogous (in two ways) to why we don’t infer 
hashability of T in:

func f<T>(…) {
  let x : Dictionary<T, String>
}

First, we want the source code for the decl to be obvious and self describing.

Second, this simplifies the type checker, by eliminating the need for it to do 
global analysis.

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

Reply via email to