[Haskell-cafe] .hi inconsistency bug.
Joe Fredette
jfredett at gmail.com
Wed Mar 18 18:35:27 EDT 2009
I seem to have fixed this bug, only to find another- the issue was that
I misunderstood what Cabal means by "exposed modules" upon exposing all
of the modules MainTypes uses, the problem resolved itself. I now have
another problem, having to do with importing the file from
$HOME/.hackmail, but I'm going to take a crack at it before bothering
the list again. Thanks very much Daniel,
/Joe
Daniel Gorín wrote:
>> So, if I understand correctly, the interpreter is compiling MainTypes
>> twice?
>
> No, the interpreter is trying to compile types that were already
> compiled by the compiler when building your application. The resulting
> types are incompatible.
>
>> Could this be a result of having two outputs (one executable and one
>> library) in my .cabal file? it _does_ compile those things twice...
>> If I create a second cabal file which separates these two different
>> packages, would that fix it?
>
> I don't think so. If you already have your application split in
> library part + executable part, then everything should be fine (as
> long as the library is installed before running your application).
>
>> The issue is, the (dynamic) interpreter part of my code is part of
>> the main loop of the program, and is (as far as I can see)
>> inseparable from the rest of the code.
>
> What you need to separate is the code you are planning to interpret in
> runtime. For example, say you have:
>
> src/HackMail/Main.hs
> src/HackMail/Data/Types.hs
> src/SomePlugin.hs
>
> and SomePlugin.hs is loaded by the interpreter, then you may want to
> reorganize your files like
> this:
>
> src/HackMail/Main.hs
> src/HackMail/Data/Types.hs
> plugins/SomePlugin.hs
>
> and set the source path to "plugins" directory (using something like
> unsafeSetGhcOption "-i./plugins", or set [searchPath :=
> ["./plugins"]], if using the darcs version).
>
> Daniel
>
>> I'll give the cabal thing a try, given the incredible triviality of
>> doing everything with cabal, I should be done testing the solution
>> before I hit the send button... Cabal guys, you rock.
>>
>> Thanks again, Dan.
>>
>> /Joe
>>
>> Daniel Gorín wrote:
>>> Hi
>>>
>>> Just a wild guess but maybe the interpreter is recompiling (in
>>> runtime) code that has already been compiled to build your
>>> application (in compile-time). This may lead to inconsistencies
>>> since a type such as HackMail.Data.Main.Types.Filter may refer to
>>> two different (and incompatible) types.
>>>
>>> To see if this is the case, make sure your "dynamic" code is not
>>> located together with your base code (i.e., move it to another
>>> directory, and set the src file directory for the interpreter
>>> accordingly). Now you may get another runtime error, something along
>>> the lines of "Module not found: HackMail.Data.MainTypes". This
>>> basically means that you need to make your (already compiled) types
>>> available to the interpreter. I think the simplest way is to put all
>>> your support types in a package, register it with ghc, link your
>>> application to it, and ask the interpreter to use this package (with
>>> a "-package " flag).
>>>
>>> Hope this helps!
>>>
>>> Daniel
>>>
>>> On Mar 17, 2009, at 11:52 PM, Joe Fredette wrote:
>>>
>>>> List,
>>>>
>>>> I've got this project, source on patch-tag here[1]
>>>>
>>>> It's a nice little project, I've got the whole thing roughly
>>>> working, it compiles okay, everything seems to work, until I try to
>>>> run it, specifically when I run it in ghci, or when I run the main
>>>> executable (which uses hint), and look at any type involving my
>>>> "Email" type, it gives me the following error:
>>>>
>>>> Type syonym HackMail.Data.MainTypes.Filter:
>>>> Can't find interface-file declaration for type constructor or
>>>> class HackMail.Data.ParseEmail.Email
>>>> 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
>>>>
>>>> As far as I understand, it wants to find the interface-file
>>>> declaration for a specific type (Email) exported by the ParseEmail
>>>> module, all of the exports (I think) are in order. I've tried
>>>> mucking around with it a bit, but I don't fully understand what the
>>>> error even means, much less how to fix it.
>>>>
>>>> Other relevant info, Email is exported in a roundabout way, namely
>>>> by importing a module MainTypes, which exports a module Email,
>>>> which exports a the ParseEmail Module, which exports the datatype
>>>> Email.
>>>>
>>>> The "Filter" delcaration it _actually_ complains about (it's just
>>>> the first place the email type is invoked) is:
>>>>
>>>> type Filter a = ReaderT (Config, Email) IO a
>>>>
>>>> nothing particularly special.
>>>>
>>>> Any help fixing this is greatly appreciated, I did find this bug
>>>> report[2] which seems like it might be relevant.
>>>>
>>>> But trying to unregister -> cabal clean -> cabal install doesn't
>>>> fix it. I've also tried manually removing the dist/ folder, and
>>>> also unregistering the package.
>>>>
>>>> Thanks again.
>>>>
>>>> /Joe
>>>>
>>>> [1] http://patch-tag.com/repo/Hackmail/browse
>>>> [2] http://hackage.haskell.org/trac/ghc/ticket/2057
>>>> <jfredett.vcf>_______________________________________________
>>>> Haskell-Cafe mailing list
>>>> Haskell-Cafe at haskell.org
>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>
>>>
>> <jfredett.vcf>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jfredett.vcf
Type: text/x-vcard
Size: 296 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20090318/2d45189b/jfredett.vcf
More information about the Haskell-Cafe
mailing list