planning for ghc-6.10.1 and hackage

Claus Reinke claus.reinke at talk21.com
Thu Oct 2 12:05:33 EDT 2008


>> The other problem is that packages currently typically specify an
>> optimistic upwardly open range rather than a pessimistic closed range.
>> Cabal uses the heuristic of picking the highest version of each package
>> that satisfies the version constraints.
> 
> One could try to use the Ghc Api to run Ghc in typecheck-only mode,
> trying the highest versions of dependencies, as given by Cabal's heuristic,
> and suggesting to add upper bounds on any dependencies with which
> compilation would give errors but for which lower versions are available
> within the erroneously specified ranges.

You might not even need to code your own Ghc Api client - it seems that
using something like this might do for just checking buildability without 
generating files, running code, or displaying prompts:

    ghc -ignore-dot-ghci <package and other options from .cabal> -e '"works"' 

Consider these example "projects" which are somewhat picky about their 
package versions:

    -- WhichBase.hs, needs base 3, or base 4 + syb
    import X
    import Data.Generics
    main = putStrLn x

    -- WhichGhc.hs, needs ghc < 6.9(whenever the api was changed)
    import X
    import GHC
    main = do
      newSession Nothing
      putStrLn x

    -- X.hs, just to check that we're doing import chasing
    module X where
    x = "hi"

Then we can find out whether open-ended dependencies like 
just "ghc" or just "base" will do:

    $ /cygdrive/c/ghc/ghc-6.8.3/bin/ghc -ignore-dot-ghci -hide-all-packages -package base 
            -package ghc -e '"works"' WhichBase.hs
    "works"

    $ /cygdrive/c/ghc/ghc-6.11.20080925/bin/ghc -ignore-dot-ghci -hide-all-packages 
        -package base -e '"works"' WhichBase.hs
    *** Exception: Could not find module `Data.Generics':
      it is a member of package base-3.0.3.0, which is hidden

    $ /cygdrive/c/ghc/ghc-6.11.20080925/bin/ghc -ignore-dot-ghci -hide-all-packages 
        -package base-3.0.3.0 -e '"works"' WhichBase.hs
    "works"

    $ /cygdrive/c/ghc/ghc-6.11.20080925/bin/ghc -ignore-dot-ghci -hide-all-packages 
        -package base -package syb -e '"works"' WhichBase.hs
    "works"


    $ /cygdrive/c/ghc/ghc-6.8.3/bin/ghc -ignore-dot-ghci -hide-all-packages -package base 
        -package ghc -e '"works"' WhichGhc.hs
    "works"

    $ /cygdrive/c/ghc/ghc-6.11.20080925/bin/ghc -ignore-dot-ghci -hide-all-packages 
        -package base -package ghc -e '"works"' WhichGhc.hs
    
    WhichGhc.hs:4:2: Not in scope: `newSession'

Does that help?
Claus



More information about the Glasgow-haskell-users mailing list