So, this is a bit of a personal problem, but maybe people will have good advice or workarounds.
The problem is about installing cabal-install and haskell-platform under Debian.
When you apt-get install haskell-platform
, it ships with cabal-install
, and its command cabal
is available.
Now this cabal-install
is not up-to-date:
> which cabal
/usr/bin/cabal
> /usr/bin/cabal --version
cabal-install version 0.8.0
using version 1.8.0.2 of the Cabal library
But, my understanding of running cabal update
is that it updates cabal, but since it is not a "Debian thingy", it puts it in ~/.cabal/bin/
.
> ~/.cabal/bin/cabal --version
cabal-install version 0.8.2
using version 1.8.0.2 of the Cabal library
Now my system has 2 cabals, and the one I get by typing cabal
is not the one I want to use... Because it'll keep updating the other one instead of itself, and is therefore ineffective.
So what I did was I aliased it in my ~/.bashrc
:
alias cabal='~/.cabal/bin/cabal'
Now:
> cabal --version
cabal-install version 0.8.2
using version 1.8.0.2 of the Cabal library
So, my final questions:
which cabal
still points to my useless /usr/bin/cabal
, so if scripts use this command they'll get fooled...)What I do is installing cabal with the --global
flag. This will install cabal into /usr/local/bin/cabal
, thus it will always superseed the Debian packages cabal.
Another way, is to generally avoid the Debian packages and install the Haskell platform straight from its source. This approach is also better, if you always want to have the latest releases of the Haskell libs.
I keep my user-local $HOME/.cabal/bin
in the front of the PATH
.
I install only ghc6
, ghc6-prof
, ghc6-doc
and cabal-install
from the distribution packages. I don't use distribution cabal-install
for anything more than to bootstrap the new ~/.cabal
.
All the rest I install with cabal install
, including the newer cabal
itself.
When I want to use newer GHC, I deploy it in /usr/local/stow/ghcVERSION
, and enable it with GNU stow
(it adds symlinks in /usr/local
which, again, has precedence in my PATH
). When I want to switch back to the distribution GHC I just run stow -D
to remove all symbolic links to it.
I consider using cabal-dev
to have project-specific cabal installations, and avoid broken dependencies which happen with cabal
from time to time.
As a matter of fact I don't use Haskell Platform at all because I don't need all of it and find it easier to be able to install individual libraries. I do not install distribution libraries, because not all of them are available or are exactly the versions I need; and it is much easier to control conflicts if all of them are installed in the same place (~/.cabal
in my case). I do not install anything with --global
, because I think it is wrong and difficult to rollback.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With