[Haskell-cafe] GHC API - list all exports of a module

Jochen Keil jochen.keil at gmail.com
Mon Feb 2 19:05:54 UTC 2015


Hi,

On 02.02.2015 18:36, Alan & Kim Zimmerman wrote:
> Have you looked at ModuleInfo [1] ?

Yes, that's the path I went after type checking the module. There's also
ModIface which could be suitable for my purpose.

> And what do you mean by the exported declarations?

I'm sorry if I didn't make my intent clear enough. There's the pure
parser [1], which (at least I think so) is also used for parseModule
[2]. This results in a HsModule object [3]. HsModule provides amongst
others a field for exports [4] and *all* declarations [5].

I am explicitly only interested in *exported declarations*. But I don't
see how I could combine [4] and [5] to achieve that, while avoiding to
run the type checker.

Sorry again if I was or still am unclear, but I hope it's better now. :)

Cheers,
  Jochen


[1]
https://downloads.haskell.org/~ghc/7.8.3/docs/html/libraries/ghc-7.8.3/GHC.html#v:parser
[2]
https://downloads.haskell.org/~ghc/7.8.3/docs/html/libraries/ghc-7.8.3/GHC.html#v:parseModule
[3]
https://downloads.haskell.org/~ghc/7.8.3/docs/html/libraries/ghc-7.8.3/HsSyn.html#t:HsModule
[4]
https://downloads.haskell.org/~ghc/7.8.3/docs/html/libraries/ghc-7.8.3/HsSyn.html#v:hsmodExports
[5]
https://downloads.haskell.org/~ghc/7.8.3/docs/html/libraries/ghc-7.8.3/HsSyn.html#v:hsmodDecls



> If you are prepared to use the HaRe API (ony up to GHC 7.6.3) you can use
> definingDeclsNames [2]
> 
> [1]
> https://downloads.haskell.org/~ghc/7.8.3/docs/html/libraries/ghc-7.8.3/GHC.html#t:ModuleInfo
> [2]
> http://hackage.haskell.org/package/HaRe-0.7.2.8/docs/Language-Haskell-Refact-API.html#v:definingDeclsNames
> 
> 
> 
> 
> On Mon, Feb 2, 2015 at 6:58 PM, Jochen Keil <jochen.keil at gmail.com> wrote:
> 
>> Hi Erik,
>>
>> On 02.02.2015 12:55, Erik Hesselink wrote:
>>> On Mon, Feb 2, 2015 at 12:46 PM, Jochen Keil <jochen.keil at gmail.com>
>> wrote:
>>>> Hello Peter,
>>>>
>>>> On 02.02.2015 12:31, Peter Simons wrote:
>>>>> Hi Jochen,
>>>>>
>>>>>  > My main goal would be to have a program which takes two modules of
>>>>>  > different versions, compare them and highlight the differences
>>>>>  > between them.
>>>>>
>>>>> maybe http://hackage.haskell.org/package/hackage-diff would work for
>>>>> your purposes?
>>>>
>>>> Thanks for the hint, this looks pretty good.
>>>>
>>>> One thing though: hackage-diff uses haskell-src-exts for parsing
>>>> modules. Does haskell-src-exts re-use the GHC API or does it run its own
>>>> parser? (from a quick glance I'd say the latter case)
>>>
>>> There are basically two routes to choose from with such a tool (of
>>> which a few already exist, I think): you can use GHC and its API, like
>>> you're doing, or you can use haskell-src-exts, which is a separate
>>> parser, and use haskell-names for name resolution (and
>>> haskell-packages for dependency information). Sadly there's no
>>> haskell-type-exts for typechecking (yet). The GHC route is probably
>>> more powerful, the haskell-suite route is simpler and doesn't depend
>>> on GHC.
>>
>> thanks for the clarification!
>> Indeed it seems to me that the GHC approach is more powerful, because
>> after running the typechecker I would have the AST available for
>> comparing modules (did I get this right?). Drawback would obviously be
>> the need for running the typechecker. :)
>>
>> So, just for the sake of my curiosity:
>> Is there a way to get the exported declarations (and not just the
>> RdrNames) from GHC without running the typechecker?
>> I don't understand why it's necessary to run the typechecker in order to
>> get this list. The parser already returns a list with all declarations,
>> so shouldn't it be possible to filter this list for only the exported ones?
>>
>> Thanks,
>>   Jochen
>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20150202/07227bd2/attachment.sig>


More information about the Haskell-Cafe mailing list