How to load & parse an HI (interface) file?

Saurabh Nanda saurabhnanda at gmail.com
Sun Dec 3 02:37:25 UTC 2017


I _think_ I've found what I need from
https://github.com/ghc/ghc/blob/8843a39b3c941b1908a8d839f52bc323f3b45081/compiler/iface/LoadIface.hs#L994-L1002


On Sun, Dec 3, 2017 at 7:41 AM, Saurabh Nanda <saurabhnanda at gmail.com>
wrote:

> > I would be cautious about using the ghc-api hi file interfaces; hi files
> turn out to interact with a
> > lot of low-level parts in complex ways (even to the extent that they're
> a large part of why ghc
> > can't parallelize builds itself and attempts to change that have mostly
> failed).
>
> Are you cautioning against using the GHC API (as opposed to the
> --show-iface command line interface)
> or using HI files themselves?
>
> -- Saurabh.
>
>
> On Sun, Dec 3, 2017 at 2:04 AM, Brandon Allbery <allbery.b at gmail.com>
> wrote:
>
>> I would be cautious about using the ghc-api hi file interfaces; hi files
>> turn out to interact with a lot of low-level parts in complex ways (even to
>> the extent that they're a large part of why ghc can't parallelize builds
>> itself and attempts to change that have mostly failed).
>>
>> But if you must do this, you *really* want to have
>> https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler ready to hand
>> --- and go through it first so you have some idea of how it works; much of
>> it is links to the lower level details (often straight into the source).
>>
>> On Sat, Dec 2, 2017 at 10:59 AM, Saurabh Nanda <saurabhnanda at gmail.com>
>> wrote:
>>
>>> (GHC newbie alert -- is this the right mailing list for these kind of
>>> questions?)
>>>
>>> I"m writing some code to figure out all the instances of particular
>>> type-classes and after exploring a lot of options (hlint, haskell-src-exts,
>>> annotations, doctests, etc), I realized that the compiler had already
>>> figured it out and written it to disk for me!
>>>
>>> More digging led me to https://www.stackage.org/haddo
>>> ck/lts-9.0/ghc-8.0.2/LoadIface.html#v:loadSrcInterface after which I
>>> got stuck. How does one call this function? Specifically:
>>>
>>> * What is SDoc and how to construct a reasonable value for this argument?
>>> * IsBootInterface would mostly be False, right?
>>> * What does `Maybe FastString` represent and how does one construct it?
>>> * Finally how does one evaluate the resulting monadic action to get
>>> access to the underlying `ModIface`?
>>>
>>> -- Saurabh.
>>>
>>>
>>> _______________________________________________
>>> ghc-devs mailing list
>>> ghc-devs at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>>
>>>
>>
>>
>> --
>> brandon s allbery kf8nh                               sine nomine
>> associates
>> allbery.b at gmail.com
>> ballbery at sinenomine.net
>> unix, openafs, kerberos, infrastructure, xmonad
>> http://sinenomine.net
>>
>
>
>
> --
> http://www.saurabhnanda.com
>



-- 
http://www.saurabhnanda.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20171203/ef4c9bf8/attachment.html>


More information about the ghc-devs mailing list