Cabal (software)


The Haskell Cabal aids in the packaging and distribution of software packages. It is contained in the Haskell Platform.

History

Cabal has been introduced to simplify packaging of Haskell software and modules. It was added to the Glasgow Haskell Compiler version 6.4 as default package manager, along GHC's internal manager ghc-pkg. The actual binary cabal and the library Cabal are developed in different packages.
Throughout its development it has gained additional features, such as sandboxes, which allow to escape the so-called Cabal hell.

Use

Cabal packages provide a standard set of metadata and build process; thus, it is possible to develop tools to upload Cabal packages to the CPAN-like community repository of software, Hackage, or even allow for automated downloading, compilation, and installation of desired packages from Hackage.

Criticism

Since Cabal uses a global package repository by default, version conflicts in dependencies can lead to Cabal hell, a state where certain packages cannot get installed without re-installing already existing ones and therefore breaking the other packages.
Although version 1.18 introduced sandboxes and improved this dependency hell, non-proper use of sandboxes could still lead to problems, since packages on Hackage might not build or version boundaries on dependencies were too loose. As a result, a more stable variant of Hackage called Stackage has been created.
It was later extended with Haskell LTS and the tool stack, which doesn't share its problems.