<br><div class="gmail_quote">On Wed, Nov 17, 2010 at 9:21 PM, Thomas Schilling <span dir="ltr">&lt;<a href="mailto:nominolo@googlemail.com">nominolo@googlemail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">On 17 November 2010 19:21, JP Moresmau &lt;<a href="mailto:jpmoresmau@gmail.com">jpmoresmau@gmail.com</a>&gt; wrote:<br>
&gt; Hello, I&#39;m the maintainer for EclipseFP, which involves using the scion<br>
&gt; library and the GHC API to provide IDE functionality. I have a little issue<br>
&gt; that no doubt stems from me not understanding the GHC API well, and I would<br>
&gt; be grateful for any light on the matter.<br>
&gt; I&#39;m trying to give the user the possibility to jump to the definition of a<br>
&gt; symbol in the source file. You click on the name of a function and you&#39;re<br>
&gt; send to the module where it&#39;s defined. So I have an AST, and somewhere down<br>
&gt; the line I have an Id object representing that function call. Then I just<br>
&gt; use ppr alwaysQualify id to get the fully qualified name of the function,<br>
&gt; and I can then use the module name to retrieve the source file etc. This<br>
&gt; works well in cases, but not in others. It will sound silly to the gurus on<br>
&gt; the list, but it&#39;s when the function has generics that it doesn&#39;t work. So a<br>
&gt; function with a type class in its type signature will never be printed<br>
&gt; qualified. It kinda like makes sense because I suppose some work has been<br>
&gt; done so that it represents the function with proper types, etc., but how can<br>
&gt; I get back to the original Id? How can I get back from that unqualified Id<br>
&gt; to the qualified Id representing the function in the original module? I&#39;ve<br>
&gt; been looking round Name and OccName and all that but I&#39;m not sure really<br>
&gt; what I&#39;m looking for.<br>
&gt; Hope I&#39;m making sense!!<br>
&gt; Thanks!<br>
<br>
</div></div>Note that typeclass methods all live in a top-level namespace.<br>
Qualified names are used to disambiguate between multiple names which<br>
this is not necessary for method names.<br>
<br>
I presume when you want to jump to the definition of a method, you<br>
want to do something special anyway.  You probably want to jump to the<br>
implementation of the method for the type at which it is used.  If it<br>
is used polymorphically you cannot do this (there is no statically<br>
known definition), so you could just display its type or a list of all<br>
known implementations.<br>
<br>
To find out the type at which a polymorphic or overloaded identifier<br>
is used, you have to interpret type applications (HsWrap) and<br>
abstractions (AbsBind).<br>
<br>
The GHC API provides access to all imported instances, but they<br>
probably won&#39;t have source code annotations.  Such a database must be<br>
created separately.<br>
<br>
HTH<br>
<br>
/ Thomas<br>
<font color="#888888"><br>
--<br>
Push the envelope. Watch it bend.<br>
</font></blockquote></div><br>Thanks very much, but I&#39;m not sure it that&#39;s the situation here. I don&#39;t mean methods on typeclasses but function defined as operating on typeclasses.<div>For example:</div><div>
I have this function:</div><div>overlaps :: SrcSpan -&gt; SrcSpan -&gt; Bool</div><div><br></div><div>which when pretty printed gives me a qualified name</div><div>And this one:</div><div>findHsThing :: Search id a =&gt; (SrcSpan -&gt; Bool) -&gt; a -&gt; SearchResults id</div>
<div><br></div><div>Which doesn&#39;t.</div><div>So findHsThing work on any Search id a, but there is only one implementation of that in one source file. So there should be a link between what&#39;s in the AST that may be using more specific type and the implementation.<br clear="all">
Thanks,</div><div><br>-- <br>JP Moresmau<br><a href="http://jpmoresmau.blogspot.com/">http://jpmoresmau.blogspot.com/</a><br>
</div>