I've been encouraging Paulo Faria to mention this case in his push for a way to 
disambiguate extension methods, with the thought being we could then use the 
same syntax to differentiate top-level names as well.

I'd also be happy with the "import as" syntax. The underscore syntax seems a 
little opaque, but I suppose it wouldn't come up very often.

Jordan


> On Jun 17, 2016, at 19:52, Félix Cloutier via swift-evolution 
> <[email protected]> wrote:
> 
> Hello all,
> 
> I recently ran into a bug <http://stackoverflow.com/q/37892621/251153> that 
> leaves me unable to fully-qualify the name of a type. If you import a module 
> named Foo that also contains a type named Foo, attempts to fully-qualify any 
> name in the Foo module will instead attempt to find something inside the Foo 
> type. This bug has already been reported 
> <https://bugs.swift.org/browse/SR-898>.
> 
> Here's an example with Károly Lőrentey's BTree module (which also contains a 
> BTree type) that I encountered while trying to use the OrderedSet type:
> 
> let set = OrderedSet<Int>()
> // error: 'OrderedSet' is ambiguous for type lookup in this context
> // Found this candidate: Foundation.OrderedSet:3:14
> // Found this candidate: BTree.OrderedSet:12:15
> To solve this, you would normally write BTree.OrderedSet, but now Swift 
> thinks that BTree is the BTree type, not the BTree module:
> 
> let set = BTree.OrderedSet<Int>()
> // error: reference to generic type 'BTree' requires arguments in <...>
> Any fix will require a change to the language, and as Jordan Rose stated on 
> the bug, it "needs design", so I would like to bring up the issue and discuss 
> possible solutions.
> 
> I can see several options (leaving "do nothing" aside, since I believe that 
> this needs to be resolved):
> 
> Prevent modules from containing a type with the same name
> Allow modules to be imported under different names (`import BTree as 
> BTreeModule`, `import BTreeModule = BTree` or any similar syntax)
> Create a new syntax that indicates that you're naming a module, not a type 
> (like `_.BTree.OrderedSet`)
> 
> Thoughts?
> 
> Félix
> 
> _______________________________________________
> 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