[swift-evolution] Fixing modules that contain a type with the same name
svabox at gmail.com
Mon Jun 20 12:01:34 CDT 2016
I'd like to suggest such alternative syntax to mention in your proposal:
On 20.06.2016 19:16, Félix Cloutier via swift-evolution wrote:
> If no one has anything to say, I'll be starting a proposal to introduce the
> _.Module.Type syntax.
>> Le 17 juin 2016 à 19:52:45, Félix Cloutier via swift-evolution
>> <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> a écrit :
>> 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:
>> |letset=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:
>> |letset=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`)
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> swift-evolution mailing list
> swift-evolution at swift.org
More information about the swift-evolution