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

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

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

Saurabh Nanda
(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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Harendra Kumar
GHC has a "--show-iface" option which pretty prints the ".hi" file. Not sure if it works for your use-case but it may be easier to parse the text displayed by this option.

-harendra

On 2 December 2017 at 21:29, Saurabh Nanda <[hidden email]> 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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs



_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Harendra Kumar
Also, "-ddump-hi" dumps the same information at compile time.

-harendra

On 3 December 2017 at 01:50, Harendra Kumar <[hidden email]> wrote:
GHC has a "--show-iface" option which pretty prints the ".hi" file. Not sure if it works for your use-case but it may be easier to parse the text displayed by this option.

-harendra

On 2 December 2017 at 21:29, Saurabh Nanda <[hidden email]> 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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Brandon Allbery
In reply to this post by Saurabh Nanda
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 <[hidden email]> 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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Saurabh Nanda
In reply to this post by Harendra Kumar


GHC has a "--show-iface" option which pretty prints the ".hi" file. Not sure if it works for your use-case but it may be easier to parse the text displayed by this option.


From https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/IfaceFiles --

> This textual format is not particularly designed for machine parsing. Doing so might be possible, but if you
> want to read GHC interface files you are almost certainly better off using the GHC API to do so.

That's the reason why I started investigating the GHC API.

-- Saurabh.

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Saurabh Nanda
In reply to this post by Brandon Allbery
> 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 <[hidden email]> 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 <[hidden email]> 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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net



--

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Saurabh Nanda

On Sun, Dec 3, 2017 at 7:41 AM, Saurabh Nanda <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net



--



--

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Brandon Allbery
In reply to this post by Saurabh Nanda
The problem with the API is it's complex and can break between ghc versions.
But --show-iface is even more fragile and prone to break between ghc versions.
The history of the plugins package constitutes a record of both kinds of pain.

On Sat, Dec 2, 2017 at 9:11 PM, Saurabh Nanda <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net



--



--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

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

Sebastian Graf
Hey,

there's this relatively recent thread on finding instances of a type class: 


I'm sorry, but I couldn't find a better archive for ghc-devs.

Enjoy
Sebastian

On Sun, Dec 3, 2017 at 3:43 AM, Brandon Allbery <[hidden email]> wrote:
The problem with the API is it's complex and can break between ghc versions.
But --show-iface is even more fragile and prone to break between ghc versions.
The history of the plugins package constitutes a record of both kinds of pain.

On Sat, Dec 2, 2017 at 9:11 PM, Saurabh Nanda <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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/haddock/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
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net



--



--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs



_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs