[Haskell] cabal conflicting rules

Albert Y. C. Lai trebla at vex.net
Fri Oct 28 03:51:52 CEST 2011


On 11-10-26 10:40 AM, Ben Millwood wrote:
> I don't think this is foolproof, either. Correct me, anyone else, if
> I'm wrong, but in some cases cabal will want to rebuild your packages
> that came with GHC; sometimes this can involve breaking a package that
> cannot be rebuilt (e.g. the ghc package depends on the directory
> package, if cabal tried to reinstall that for some reason, the ghc
> package would be broken).

Correct, and my http://www.vex.net/~trebla/haskell/sicp.xhtml has an 
example in the pigeon drop con section.

That example is difficult to reproduce today, as Hackage hosts far newer 
versions now than assumed back then. But you should still read it for 
the working principle. (Once upon a time, when hackage frontier versions 
matched what I wrote, it was easy to reproduce.)

To reproduce the scenerio today, at the time of writing, try this:

GHC version 7.2.1, comes with
   ghc-7.2.1
   template-haskell-2.6.0.0
   containers-0.4.1.0

where ghc depends on template-haskell depends on containers.

At the time of writing, Hackage frontier has
   QuickCheck-2.4.1.1
   template-haskell-2.6.0.0
   containers-0.4.2.0

where QuickCheck depends on template-haskell depends on containers.

At the bottom of the food chain (containers), Hackage frontier is newer 
than what we have installed, but at middle parts of the food chain 
(template-haskell), Hackage frontier matches installed versions. All 
players are ready for the pigeon drop con!

An upgrade whore comes along to upgrade containers like it is a 
ground-breaking change:

cabal install --global containers

Then a benign admin comes along to install QuickCheck because it's 
needed and it hasn't been installed:

cabal install --global QuickCheck
(triggers replacing template-haskell-2.6.0.0)

The earth-shattering disaster is complete. ghc-7.2.1 is hosed.

$ ghc -v
Glasgow Haskell Compiler, Version 7.2.1, stage 2 booted by GHC version 
6.12.1
[...]
package ghc-7.2.1-b200b39a49432181058dc1bbf8fabb95 is unusable due to 
missing or recursive dependencies:
   template-haskell-2.6.0.0-cd296972708e01dd01d7d840ce1d5d71

\∩/




More information about the Haskell mailing list