The
Haskell
Haskell () is a general-purpose, statically-typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research and industrial applications, Haskell has pioneered a number of programming lan ...
Cabal (''common architecture for building
applications and
libraries'') 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
The Glasgow Haskell Compiler (GHC) is an open-source native code compiler for the functional programming language Haskell.
It provides a cross-platform environment for the writing and testing of Haskell code and it supports numerous extensions, ...
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 (see below).
Use
Cabal packages provide a standard set of
metadata
Metadata is "data that provides information about other data", but not the content of the data, such as the text of a message or the image itself. There are many distinct types of metadata, including:
* Descriptive metadata – the descriptive ...
and build process; thus, it is possible to develop tools to upload Cabal packages to the
CPAN
The Comprehensive Perl Archive Network (CPAN) is a repository of over 250,000 software modules and accompanying documentation for 39,000 distributions, written in the Perl programming language by over 12,000 contributors. ''CPAN'' can denote eit ...
-like community repository of software,
Hackage
Haskell () is a General-purpose programming language, general-purpose, static typing, statically-typed, purely functional programming, purely functional programming language with type inference and lazy evaluation. Designed for teaching, resear ...
, or even allow for automated downloading, compilation, and installation of desired packages from Hackage.
Criticism
Cabal previously used a global package repository by default, version conflicts in dependencies could lead to Cabal hell, a state where certain packages couldn't get installed without re-installing already existing ones and therefore breaking the other packages.
In 2014, a more stable (but less bleeding edge) variant of Hackage called
Stackage was created.
In 2015, it was extended with Haskell LTS and the tool
stack, which doesn't share its problems.
Cabal v3 was released in 2019.
A new build style resolves the ''hell'' in a manner similar to the
Nix package manager
Nix is a cross-platform package manager that utilizes a purely functional deployment model where software is installed into unique directories generated through cryptographic hashes. It is also the name of the tool's programming language. A pa ...
.
References
External links
*
"The Haskell Cabal: A Common Architecture for Building Applications and Tools"-(the original proposal and specification, by Isaac Jones,
Simon Peyton Jones
Simon Peyton Jones (born 18 January 1958) is a British computer scientist who researches the implementation and applications of functional programming languages, particularly lazy functional programming.
Education
Peyton Jones graduated fr ...
,
Simon Marlow
Simon Marlow is a British computer programmer, author, and co-developer of the Glasgow Haskell Compiler (GHC). He and Simon Peyton Jones won the SIGPLAN Programming Languages Software Award in 2011 for their work on GHC. Marlow's book Parallel ...
, Malcolm Wallace, and Ross Patterson; a version was submitted to the Haskell Workshop, 2005)
Cabal talk{Dead link, date=November 2018 , bot=InternetArchiveBot , fix-attempted=yes -(slides)
Free software programmed in Haskell
Free package management systems