<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I like the fact that this would retain simplicity for basic uses - developers could continue to use '<b class="">import</b>&nbsp;Mod' and not even know about the more advanced syntax unless they need that power. The additional syntax seems like a natural progression from the base case.<div class=""><br class=""></div><div class="">Kevin, I understand the motivation for not really needed renaming for qualified imports but it feels like we would still need them for unqualified/global ones. &nbsp;Do you think this is a valid use case? As suggested previously I think this would be least confusing/ambiguous by using a seperate&nbsp;<b class="">renaming</b> syntax -</div><div class=""><b class="">import</b>&nbsp;Mod&nbsp;<b class="">hiding</b>&nbsp;(x,y)&nbsp;<b class="">renaming</b>&nbsp;(z as zz)</div><div class=""><br class=""></div><div class="">An import statement such as above could equally be handled by seperate imports - one for hiding and one for renaming - and it might be worth being flexible and support both styles.</div><div class=""><br class=""></div><div class="">+1 to submodules as well, particularly if integrated into SPM to help optimise/reduce compile times when a module depends only on part of an otherwise related group of functionality that should be vended/consumed/versioned together.</div><div class=""><br class=""></div><div class="">-Simon</div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On 29 Dec 2015, at 11:47 AM, Kevin Ballard via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">


<title class=""></title>

<div class=""><div class="">I like the idea here, but I'm not sold on the syntax. I also do explicitly want an `import qualified`. And with qualified imports, I question whether we really need to support renaming in the import syntax here.<br class=""></div>
<div class="">&nbsp;</div>
<div class="">I'm tempted to say we should just crib Haskell's import rules (<a href="https://wiki.haskell.org/Import" class="">https://wiki.haskell.org/Import</a>), with the minor change that importing members by name still makes them accessible via the module name too (in Haskell `import Mod (x, y)` makes `x` and `y` visible but does not make `Mod.x` or `Mod.y` visible). This lets you say things like<br class=""></div>
<div class="">&nbsp;</div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import</b> Mod // imports Mod and all its members<br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import</b> Mod () // only provides access to protocol conformances declared in Mod, doesn't actually <b class="">import</b> anything</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import</b> Mod <b class="">(</b>x,y<b class="">)</b> // imports `x` and `y`, which are also accessible as e.g. `Mod.x`, but does not provide `z` or `Mod.z`</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import qualified</b> Mod // imports Mod but all access to members has to go through it, e.g. `Mod.x`</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import qualified</b> Mod <b class="">(</b>x,y<b class="">)</b> // imports Mod but only provides access to `Mod.x` and `Mod.y` but not e.g. `Mod.z`</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import </b>Mod <b class="">hiding</b> <b class="">(</b>x,y<b class="">)</b> // imports Mod and its members except for `x` or `y`<br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import qualified</b> Mod <b class="">hiding</b> <b class="">(</b>x,y<b class="">)</b> // imports e.g. `Mod.z` but not `Mod.x` or `Mod.y`</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class=""><br class=""></b></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import</b> Mod <b class="">as</b> Foo // imports Mod and renames the module to Foo, so e.g. `x` and `Foo.x` are accessible<br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import</b> Mod <b class="">as</b> Foo <b class="">(</b>x,y<b class="">)</b> // renames Mod to Foo, provides `x`, `y`, `Foo.x`, and `Foo.y`</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import qualified</b> Mod <b class="">as</b> Foo // renames Mod to Foo, all members are accessible via the module e.g. `Foo.x`</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><br class=""></span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import qualified</b> Mod <b class="">as</b> Foo <b class="">(</b>x,y<b class="">)</b> // renames Mod to Foo, provides access to `Foo.x` and `Foo.y` but not e.g. `Foo.z`</span><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><br class=""></span></div>
<div class="">&nbsp;</div>
<div class="">Furthermore, you can have multiple import statements from the same module, so you can say something like<br class=""></div>
<div class="">&nbsp;</div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import qualified</b> Mod</span></div>
<div class=""><span class="font" style="font-family: menlo, consolas, &quot;courier new&quot;, monospace, sans-serif;"><b class="">import</b> Mod <b class="">(</b>x,y<b class="">)</b><br class=""></span></div>
<div class="">&nbsp;</div>
<div class="">to provide access to all of Mod qualified with the name, and additionally import `x` and `y` as unqualified identifiers.<br class=""></div>
<div class="">&nbsp;</div>
<div class="">-Kevin Ballard</div>

<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=t1lXJ9jBaqmhI-2F639qqRIv6GBQuIzl35AVl5PWMKokB6mOrPZGDCE-2F1g-2Fotcy9ev2aewUNNK9I155pvvpACNa5N7ra3TkEBIIVaK-2BYfy2cqTL48v-2By9uQhujTPLfIzhR0GQB5STZSlOZWktihl54aWEL8KsRh-2FcMXoRdyoehca0oN2-2BJoRvjuHESpZccmAHWoB1jmFh5rBTTeUtimJBYhayCEiBuakXiFL4SKiVHdgs-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</div>


_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>