[Haskell] cabal conflicting rules

Claudio Nieder private at claudio.ch
Wed Oct 26 02:26:04 CEST 2011


many thanks to all who answered my post, I learned a lot by reading them 
and the referenced web pages.

> You probably have some packages of yours installed as user and some
> others globally.  Have a look at:
> http://www.haskell.org/cabal/FAQ.html#dependencies-conflict

This explains well why I got the strange error.

> I recommend that as soon as you have a running Haskell Platform to
> always install new packages with cabal install ... --user

This is actually what I did. But this is not fool proof (and I was here 
the fool), because I can still do harm by asking cabal to install 
packages - which get registered in the user package db - that are part 
of ghc - thus registered also in the global db.

So I decided now to go the all global route - which is not really global 
as I did install ghc anyway in my own directory - so that there is only 
one package db.

For the sake of anybody stumbling over this thread in the future, this 
is what I do now:

# Fetch and untar both ghc and cabal-install, install ghc
cd /tmp
curl -O 
curl -O 
tar xf ghc-7.0.4-x86_64-apple-darwin.tar.bz2
tar xf cabal-install-0.10.2.tar.gz
cd /tmp/ghc-7.0.4
./configure --prefix=/Users/claudio/Haskell/GHC
make install

# Modify the path in bootstrap.sh for my own "global" directory
# and execute it with the --global option so that all packages it
# installs go to the global package db.
cd /tmp/cabal-install-0.10.2
perl -i -pe 's"/usr/local"\$HOME/Haskell/GHC"' bootstrap.sh
chmod u+rwx bootstrap.sh
./bootstrap.sh --global
cabal update

At this point cabal has created its config file $HOME/.cabal/config 
which I modify so that cabal defaults to global but uses my own 
directory by applying these changes:

$ diff -d  config.orig config
< -- user-install: True
> user-install: False
<   -- prefix: /usr/local
>   prefix: /Users/claudio/Haskell/GHC


More information about the Haskell mailing list