<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 19, 2016 at 9:33 PM, Timothee Cour <span dir="ltr"><<a href="mailto:thelastmammoth@gmail.com" target="_blank">thelastmammoth@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"><span style="font-size:12.8px">what about using `lazy` instead of `with`:</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">`with(import foo)`</span><div style="font-size:12.8px">=><br>`lazy(import foo)`<div><br></div><div>advantages:</div><div>* <span style="font-size:12.8px">avoids confusion regarding usual scoping rules of `with` ;</span></div><div><span style="font-size:12.8px">* conveys that the import is indeed lazy</span></div><div><br></div><div>Furthermore (regardless of which keyword is used), what about allowing `:` </div><div>```</div><div>// case 1</div><div>lazy(import foo)</div><div>void fun(){}</div><div><span style="font-size:12.8px"><br></span></div><div style="font-size:12.8px">// case 2</div><div><span style="font-size:12.8px">lazy(import foo) {</span></div><div><span style="font-size:12.8px">  void fun(){}</span></div><div><span style="font-size:12.8px">}</span><br></div><div><span style="font-size:12.8px"><br></span></div><div style="font-size:12.8px">// case 3 : <span style="font-size:12.8px">this is new</span></div><div><span style="font-size:12.8px">lazy(import foo): </span><br></div><div><span style="font-size:12.8px">void fun1(){}</span><span style="font-size:12.8px"><br></span></div><div><div style="font-size:12.8px"><span style="font-size:12.8px">void fun2(){}</span><span style="font-size:12.8px"><br></span></div></div><div style="font-size:12.8px"><span style="font-size:12.8px">```</span></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br></span></div><div style="font-size:12.8px"><span style="font-size:12.8px">advantages:</span></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br></span></div><div style="font-size:12.8px"><span style="font-size:12.8px">* same behavior as other constructs which don't introduce a scope:</span><br></div><div style="font-size:12.8px"><span style="font-size:12.8px">```</span></div><div style="font-size:12.8px"><span style="font-size:12.8px">// case 1, 2 3 are allowed:</span></div><div style="font-size:12.8px"><span style="font-size:12.8px">version(A):</span><br></div><div style="font-size:12.8px"><span style="font-size:12.8px"><div style="font-size:12.8px">static if(true):</div><div style="font-size:12.8px">private:</div><div style="font-size:12.8px">void fun(){}</div><div>```</div></span></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br></span></div><div style="font-size:12.8px"><div style="font-size:12.8px"><span style="font-size:12.8px">* avoids nesting when case 3 is used (compared to when using `{}`)</span></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br></span></div></div><div style="font-size:12.8px"><span style="font-size:12.8px">* I would argue that grouping lazy imports is actually a common case; without case 3, the indentation will increase.</span></div></div></div></blockquote><div><br></div><div><br></div><div>Andrei: ping on this? (especially regarding allowing `:`)</div><div><br></div><div><br></div><div><br></div><div> </div></div></div></div>