Using GHC API
C.M.Brown
cmb21 at kent.ac.uk
Mon Nov 27 05:34:42 EST 2006
Hi Ian,
After some playing around and hacking of my code, I finally got it to
work. The problem is that the hscTarget flag needs to be set to HscNothing
when running in the JustTypeCheck mode:
GHC.setSessionDynFlags ses $ dflags1 {verbosity = 1, hscTarget=HscNothing}
If you change the above line everything works. Something very subtle that
I compeletely overlooked.
Thanks for your help.
Chris.
On Sat, 25 Nov 2006, Ian Lynagh wrote:
>
> Hi Chris,
>
> On Fri, Nov 10, 2006 at 04:15:10PM +0000, C.M.Brown wrote:
> >
> > I am currently in the process of porting some of the Haskell
> > Refactorer (HaRe) over to ghc 6.6. Part of HaRe requires the API and until
> > now I've been content with using th 6.5 API. However, since I've started
> > the switch I've noticed some strange problems and the latest is I am
> > getting the following error when trying to find the type of an expression:
> >
> >
> > <interactive>:1:0:
> > Can't find interface-file declaration for Main.main
> > Probable cause: bug in .hi-boot file, or inconsistent .hi file
> > Use -ddump-if-trace to get an idea of which file caused the error
>
> Attached is a smaller module showing the same thing, along with the
> (trivial) Main.hs I was testing with.
>
> If I tell it to use Interactive mode then all is well:
>
> $ ./hasktags Interactive Main.hs
> Loading package base ... linking ... done.
> [1 of 1] Compiling Main ( Main.hs, Main.o )
> Just GHC.IOBase.IO ()
>
> but if I tell it to use JustTypecheck mode then it breaks:
>
> $ ./hasktags JustTypecheck Main.hs
> [1 of 1] Compiling Main ( Main.hs, Main.o )
>
> <interactive>:1:0:
> Can't find interface-file declaration for variable Main.main
> Probable cause: bug in .hi-boot file, or inconsistent .hi file
> Use -ddump-if-trace to get an idea of which file caused the error
> Nothing
>
> (remove *.hi *.o between runs)
>
> So it looks like using Interactive mode should allow you to get on for
> now.
>
> ghc --show-iface Main.hi gives
>
> interface main:Main 1 6070 where
> export main:Main main
> module dependencies:
> package dependencies: base
> orphans: base:GHC.Base
> family instance modules:
> main :: GHC.IOBase.IO ()
> main :: GHC.IOBase.IO ()
>
> in the first case, but the last two lines are missing in the second.
>
> This raises a few questions:
>
> Are there meant to be two "main :: GHC.IOBase.IO ()" lines when it works?
>
> Should it work with JustTypecheck? It looks like the point of
> JustTypecheck is that IDEs should be able to ask the type of something
> actually written in the file, but would it actually be more expensive to
> allow the information to be used to type other expressions?
>
> Should JustTypecheck be generating a .hi and .o file at all? It seems
> wrong to me.
>
> Simons?
>
>
> Thanks
> Ian
>
>
More information about the Glasgow-haskell-users
mailing list