> On Jun 7, 2016, at 7:09 AM, Charlie Monroe via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>> We already have the concept of prefixing a type name with a module to 
>> disambiguate when two modules have the same type. I wonder if we could do 
>> the same thing to disambiguate between conflicting extensions?
>> 
>>      import ModuleA
>>      import ModuleB
>>      
>>      ("hello world" as ModuleA.String).capitalized() // Swift.String, with 
>> only APIs known to ModuleA
>>      ("hello world" as ModuleB.String).capitalized() // Swift.String, with 
>> only APIs known to ModuleB
>>      "hello world".capitalized()                                     // 
>> Still causes a compile-time error for ambiguity
> 
> This only introduces a new kind of ambiguity since you can have both ModuleA 
> and ModuleB declare something like
> 
> class String {
>       /// ...
> }
> 
> And now you have no idea if ModuleA.String refers to Swift.String extension 
> in ModuleA or class String in ModuleA.

Perhaps the disambiguation should be on the extension method, not the type:

        import ModuleA
        import ModuleB
        
        "hello world”.ModuleA::capitalized()
        "hello world”.ModuleB::capitalized()

(Insert your own namespace separator if :: gives you unpleasant C++ flashbacks.)

P

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to