The cabal-install package provides the
cabal command-line tool which simplifies the process of managing Haskell software
by automating the fetching, configuration, compilation and installation of Haskell libraries and programs.
Those packages must be prepared using Cabal and should be present at Hackage.
1.1 Installing a package
Once you have the tool installed, installing other packages is easy. The first thing to do is to give the command:
This will download the most recent list of packages; this must be done from time to time, to get the latest version of each package, when installing.
To install Cabal packages from Hackage use:
cabal install foo
Other common variations:
cabal install Package in the current directory cabal install foo Package from the hackage server cabal install foo-1.0 Specific version of a package cabal install 'foo < 2' Constrained package version cabal install foo bar baz Several packages at once cabal install foo --dry-run Show what would be installed cabal install foo --constraint=bar==1.0 Use version 1.0 of package bar
One thing to be especially aware of, is that the packages are installed locally by default, whereas the commands
runhaskell Setup configure runhaskell Setup build runhaskell Setup install
install globally by default. If you install a package globally, the local packages are ignored. The default for cabal-install can be modified by editing the configuration file.
Help about cabal-install can be obtained by giving commands like:
cabal --help cabal install --help
1.2 The cabal-install configuration file
You can edit the cabal configuration file to set defaults:
~/.cabal/config (for *nix based systems)
For Windows there are different locations for different versions of Windows (just to make things easy). To get the directory cabal actually uses, start GHCi and give the following commands:
:m System.Directory getAppUserDataDirectory "cabal"
1.2.1 Things to put in the config file
To turn on --global by default:
The root-cmd configuration parameter can be used to automatically run cabal-install with root privileges on *nix based systems, when needed:
If you have the Haskell Platform installed, you already have cabal-install; no further action is needed.
Get a pre-built
You must put the
cabal.exe in a directory that is on your
%PATH%, for example
Download the latest cabal-install tarball from:
It includes a shell script
bootstrap.sh that you can run to download and install the other dependencies.
Note this assumes you have the zlib C library and its header files installed. Those header files are usually in a native system package like
zlib-devel (On debian-based systems it is
zlib1g-dev). You should also have the Haskell packages
network installed. If you installed GHC via your native system package manager then you may also need to use it to install these two packages. (On debian-based systems they are called
tar -zxf cabal-install-0.14.0.tar.gz cd cabal-install-0.14.0 ./bootstrap.sh
If this completes successfully you will have the cabal binary in
~/.cabal/bin. You should either add this directory to your
$PATH or copy the cabal program to some location that is on your
to get the current list of package from hackage you should now run:
By default the cabal tool will install programs in
~/.cabal/bin. If you decided not to put this directory on your
$PATH then you can get cabal to symlink binaries into another directory, eg
~/bin. To use this feature edit
~/.cabal/config and see the
symlink-bindir field. Note that the
~/.cabal/config file is not created until you run a cabal command for the first time, eg
3 Error reporting
Errors in cabal-install can be reported at the Hackage Wiki and Bug Tracker
4.1 I just installed packages, but now the packages are not found
This happens when you install a package globally, and the previous packages were installed locally. Note that cabal-install install locally by default and the "runhaskell Setup" commands install globally by default.
4.2 How can I uninstall packages?
There is no "cabal uninstall" command. You can only unregister packages with ghc-pkg: