Skip to content
Liam edited this page Sep 25, 2023 · 35 revisions

Update Note

Much of the wiki information is old, but not necessarily obsolete. The wiki is currently being updated to provide a better on-boarding experience for new contributors. For smaller problems with the Wiki, use the #hackage channel on irc.libera.chat or on Cabal and Hackage's Matrix channel. If you notice major problems, consider bringing it up in Github issues.

Existing material

This wiki is for development of the Cabal project.

Cabal is a Common Architecture for Building Applications and Libraries in the Haskell programming language. It was originally the subject of a proposal by a team of influential Haskell implementors to unify the then-disparate methods for turning a collection of .hs files into a program that could be run. It consists of several components:

  • The Cabal package specification format, for writing files that contain metadata about a Haskell library or program, such as its name, version, author, build dependencies, etc.
  • The Cabal library, which parses files in the format of the same name and translates them into compilerspeak.
  • The cabal-install tool, which provides a nice interface for fetching packages from the package repository Hackage, and using Cabal to configure, compile, and install them.

Resources for users

The Cabal website has a bunch of documentation and related resources, including the user guide, and is probably where anyone interested in using Cabal should go for help.

Some things have been written sufficiently recently that they haven't made it into the guide yet:

Reporting bugs

We use the GitHub issue tracker for both Cabal and cabal-install.

Resources for developers

General information:

  • Style guide – there isn't one yet, but there's a discussion about what there should be. Edit: Contributing.md contains more information on the expected style in this project. Note that "the dependencies that shipped with GHC" refers to the libraries that come with a standard GHC install, and there is an expectation of compatibility with 5 years of GHC releases.
  • Have a look at the content migrated from the Hackage Trac wiki.
  • Making a release - step-by-step guide to making a release of Cabal and cabal-install.
  • Potential Refactors - if you have some time to spare

For asking questions:

  • The development mailing list.
  • The #hackage IRC channel on libera.chat. Many Cabal developers also hang out in #ghc.
  • We have a Slack team, which is primarily used to get build notifications for pull requests. To get issued an invite, fill in your email at this sign up page. Contact @ezyang if you have any problems with these.

This wiki

Information that should be attached to development of the Cabal library and cabal-install tool goes on this wiki. Information about how to use Cabal or cabal-install should end up in the user's guide, but drafting something to go in there counts as development information, so goes on the wiki :)

If you want a quick chat, go to IRC. If you want a thoughtful discussion, go to the mailing list. If that discussion proves fruitful, write a wiki article about it! Much wisdom is stored in ML archives but inscrutable to the casual observer; wiki articles are much easier to find and update.

GitHub wikis are built on Gollum, and information on how to use them is detailed in its README. They support a variety of markup languages, but for consistency's sake, we should probably stick to using Markdown everywhere.