<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Jun 19, 2014 at 10:53 AM, Matthew Robb <span dir="ltr"><<a href="mailto:matthewwrobb@gmail.com" target="_blank">matthewwrobb@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div style="font-family:trebuchet ms,sans-serif;color:rgb(68,68,68)">What if the `import "module/id";` form was an expression that evaluated to the module instance object.<br>


<br></div><div style="font-family:trebuchet ms,sans-serif;color:rgb(68,68,68)">This means everything stays as it is now except we remove the ModuleImport form and if you want to use the module instance object you can do: `var foo = import "foo";`. You could also do `var { bar } = import "foo";`<span class="HOEnZb"><font color="#888888"><br>


</font></span></div></div><div class="gmail_extra"><span class="HOEnZb"><font color="#888888"><br clear="all"></font></span></div></blockquote><div><br></div><div>This is essentially identical to System.get("foo"), other than the restriction on the argument being a string.  It lends itself to imperative code when what you're after is a declarative syntax.</div>
<div><br></div><div>Making it an expression also means it's not a toplevel form in the grammar, and so you could do things like this:</div><div><br></div><div>function foo() {</div><div>  if (someCondition)</div><div>
    return import "module1";</div><div>  else</div><div>    return import "module2";</div><div>}</div><div><br></div><div>or even similar to your examples:</div><div><br></div><div>var { bar } = someCondition ? import "foo" : import "bar";</div>
<div><br></div><div>which would make precise and static computation of the set of imports impossible, and likely complicate module resolution as well.</div><div><br></div><div>-c</div></div><br></div></div>