[swift-evolution] Fixing modules that contain a type with the same name

Vladimir.S 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:

Module::Type


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.
>
> Félix
>
>> 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`)
>>
>>
>> Thoughts?
>>
>> Félix
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>


More information about the swift-evolution mailing list