On 22/01/14 18:07, Rogan Creswick
wrote:
Yes, in particular:
$ ghc-pkg expose Cabal-1.18.1.2
$ rm -fr .cabal-sandbox cabal.sandbox.config dist
$ cabal sandbox init
$ cabal install --dependencies-only
$ cabal install
$ .cabal-sandbox/bin/ghc-imported-from src/Main.hs Main getArgs 11
11 --ghc-options --ghc-pkg-options
runs with no problems.
I dug into this a bit more and I think it's a bug in my own code:
the error that I quoted before was not the executable blowing up,
instead it was runGhc exploding because I did not pass the right
flags to the GHC API when I called "load LoadAllTargets".
Stepping back, I can reproduce the error with plain ghci:
$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :l src/Main.hs
[1 of 3] Compiling
Language.Haskell.GhcImportedFrom.UtilsFromGhcMod (
Language/Haskell/GhcImportedFrom/UtilsFromGhcMod.hs, interpreted )
[2 of 3] Compiling Language.Haskell.GhcImportedFrom (
Language/Haskell/GhcImportedFrom.hs, interpreted )
Language/Haskell/GhcImportedFrom.hs:132:54:
Couldn't match expected type
`Distribution.PackageDescription.BuildInfo'
with actual type
`Cabal-1.16.0:Distribution.PackageDescription.BuildInfo'
In the fourth argument of `getGHCOptions', namely `binfo'
In a stmt of a 'do' block:
getGHCOptions [] c (fromJust $ cradleCabalDir c) binfo
In the expression:
do { c <- findCradle;
pkgDesc <- GhcMonad.liftIO
$ parseCabalFile $ fromJust $
cradleCabalFile c;
let binfo = head $ cabalAllBuildInfo pkgDesc;
getGHCOptions [] c (fromJust $ cradleCabalDir c) binfo
}
Failed, modules loaded:
Language.Haskell.GhcImportedFrom.UtilsFromGhcMod.
whereas cabal repl works fine, because it parses the .cabal file and
realises that it needs the earlier version of Cabal.
Confirming this, if I use -package to specify the version of Cabal
then it works fine:
$ ghci -package Cabal-1.16.0
(all happy now)
So I should look at how the latest Cabal (in particular "cabal
repl") works out the right flags to pass to ghci, and incorporate
that into my ghc-imported-from project. I see that the developer of
ghc-mod has run into a similar issue recently:
https://github.com/kazu-yamamoto/ghc-mod/issues/171
Nope, it's a wrinkle in my understanding of Cabal/ghci/etc :)
Thanks for the reply though, it helped me hunt down the problem.
Cheers,
--
Carlo Hamalainen
http://carlo-hamalainen.net