How can I disambiguate a type and a module with the same name? : <p>I'm trying to use Károly Lőrentey's <a href="https://github.com/lorentey/BTree">B-tree based <code>OrderedSet</code></a> in a project. However, I'm running into an issue where I can't declare an unqualified <code>OrderedSet&lt;T&gt;</code> because the name conflicts between Foundation's <code>NSOrderedSet</code> (imported as <code>OrderedSet</code> in Swift 3) and <code>BTree</code>'s <code>OrderedSet</code>.</p>

<pre><code>let set = OrderedSet&lt;Int&gt;()
// error: 'OrderedSet' is ambiguous for type lookup in this context
// Found this candidate: Foundation.OrderedSet:3:14
// Found this candidate: BTree.OrderedSet:12:15
</code></pre>

<p>To resolve this conflict, you would normally qualify the name, and that would give you <code>BTree.OrderedSet&lt;T&gt;</code>. However, the <code>BTree</code> module also contains a class named <code>BTree</code>. If I write <code>BTree.OrderedSet</code>, Swift thinks that I'm referring to a type named <code>OrderedSet</code> that is nested in the <code>BTree.BTree</code> type.</p>

<pre><code>let set = BTree.OrderedSet&lt;Int&gt;()
// error: reference to generic type 'BTree' requires arguments in &lt;...&gt;
</code></pre>

<p>If I don't <code>import BTree</code>, I can't use the <code>BTree</code> name at all.</p>

<pre><code>// no import BTree
let set = BTree.OrderedSet&lt;Int&gt;()
// error: use of undeclared type 'BTree'
</code></pre>

<p>How can I resolve this ambiguity between the <code>BTree</code> type and the <code>BTree</code> module?</p>
