<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Aug 5, 2015 at 6:08 PM Evan Laforge <<a href="mailto:qdunkan@gmail.com">qdunkan@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Wed, Aug 5, 2015 at 9:55 AM, Oliver Charles <<a href="mailto:ollie@ocharles.org.uk" target="_blank">ollie@ocharles.org.uk</a>> wrote:<br>
> It makes me sad if we can't progress the language on the grounds that<br>
> people's attempts at parsing the source code themselves would break. If you<br>
> want to know all the imports, then we should be providing this information<br>
> through tools for people to consume.<br>
<br>
It's not whether or not there's a tool, there already is.  It's that<br>
the tool must be more complicated.  For example, we can get imports<br>
from haskell-src-exts but it has bugs, it can be out of date, and it's<br>
slower.  Or ghc -M... which doesn't have those problems.  So maybe<br>
it's not really a serious objection.<br></blockquote><div><br></div><div>This is a problem that shouldn't even exist. If you want a tool that supports GHC's extensions then we should be <i>using GHC</i> - it is a library after all. haskell-src has a need to exist as a non-GHC-dependent parser, and that's great - but for parsing GHC specific code we should be able to just use GHC. The fact that that isn't the case right now is a failing on our parts, but one that we seem to be actively fixing (c.f. ghc-exactprint). </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
>> On the other hand, lots of languages have a "local open" feature like<br>
>> this.  I think many of them make you first import the module, and then<br>
>> you can "open" it in a local scope.  This would address both my "parse<br>
>> the whole file for imports" objection and the "what about instances",<br>
>> because module importing would be unchanged.<br>
><br>
> Indeed, this could be a path forward. I'm not really familiar with any<br>
> languages that do this, could you link to some examples of how this works in<br>
> other languages?<br>
<br>
I was thinking of agda.. though it's only from memory so I could be<br>
wrong.  Or perhaps it was cayenne... one of those dependently typed<br>
languages models modules as records, and then has syntax to dequalify<br>
record access.  Rust has a full-on nested module system, but I seem to<br>
recall you have to declare a link dependency on an external crate<br>
("import"), and then separately import the symbols from it ("use").<br></blockquote><div><br></div><div>Indeed, Agda does have stuff like that - though it does require more syntax. It is a pretty sophisticated import system, though .</div><div><br></div><div><i>ocharles</i></div></div></div>