Using GHC API

Simon Marlow simonmarhaskell at gmail.com
Wed Nov 29 04:26:45 EST 2006


C.M.Brown wrote:
> 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}

Yes, the HscTarget thing is something of a wart.  I started to clean it up, but 
didn't get around to finishing it yet.  Here's the relevant ticket:

  http://hackage.haskell.org/trac/ghc/ticket/276

Cheers,
	Simon

> 
> 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