đź’« A curated list of awesome resources for the Haskell Cabal build tool.
A curated list of awesome resources for the Haskell Cabal build tool.
Cabal — Common Architecture for Building Applications and Libraries — is the tool to build and maintain Haskell packages.
haskell/cabal
: Official GitHub source
repository.There are various means of installing Cabal
. Depending on your operating
system and prefered method, you can choose a suitable way to do that.
ghcup
:
Haskell toolchain installer for Linux and macOS.
Use ghcup install-cabal
command to install Cabal. Refer to the
documentation for more details.Cabal
.Cabal
on all operating systems from sources or by downloading
the binary.CabalChoco
:
Chocolatey sources for pure Cabal installs on Windows.Cabal
on macOS.ghcups
:
ghcup
for PowerShell on Windows.Write-ups and examples that could help to get into Cabal
and start using it.
new-
commands.cabal init
command to create a project.summoner
:
CLI tool for scaffolding fully configured batteries-included production-level
Haskell projects.summoner-tui
:
TUI tool for scaffolding fully configured batteries-included production-level
Haskell projects.hi
:
Generate scaffold for cabal project.example-cabal-project
:
A simple example project using cabal-install, Nix, and direnv.Cabal
Configuration Format.cabal
files use a special format to specify package configurations.
cabal-fmt
:
CLI tool to format .cabal
files.cabal-info
:
Simple command-line interface to read and output information from the
.cabal
file.Useful information on various Cabal components. These could be useful blog posts on specific features, or description of handy parts of the Cabal specification.
.cabal
file.cabal-bounds
:
A command line program for managing the bounds/versions of the dependencies
in a cabal file.cabal-cargs
:
A command line program for extracting compiler arguments from a cabal file.mixin
feature to replace default Prelude
.Backpack is a feature that allows implementing mix-in libraries in Haskell. Mix-in libraries can have signatures which permit implementations of values and types to be deferred, while allowing a library with missing implementations to still be type-checked.
signatures
field
mixins
field
Map
s and Set
s).backpack-str
:
Signatures for string types.reflex-backpack
:
Backpack implementation of Reflex.containers-backpack
:
Signatures for various containers (e.g. Map
, HashMap
, etc.)streamy
:
Signatures for streaming libraries.unpacked-containers
:
Unpacked sets and maps exploiting Backpack's ability to unpack through
signatures.It is recommended for Haskell packages to follow PvP — Package versioning Policy.
pvp
:
The GitHub repository to create issues against.policeman
(by Kowainik):
Policeman assists to properly choose the next version number according
to PVP (Packaging Version Policy) for the Haskell packages based on the
semantical changes to the interface.check-pvp
:
Check whether module and package imports conform to the PVP.CLI tools that provide additional interface to cabal-install
.
cabal-install
:
The command-line interface for Cabal and Hackage.vabal
:
The cabal companion that leverages Cabal's capabilities of working with
different GHC versions.hkgr
:
Tool to help make new releases of Haskell packages, with commands for git
tagging, pristine sdist, and uploading to Hackage.releaser
:
Automation of Haskell package release process.iridium
:
This tool aims to automate several typical steps when uploading a new package
version to Hackage.cabal-plan
:
Library and utility for processing cabal's plan.json
file.cabal-extras
:
A tool suite to aid Haskell development using cabal-install
.cabal-helper
:
Give Haskell development tools access to the same environment which build
tools such as Cabal normally provide to the compiler.cabal-sort
:
Given a number of cabal package files, this program reads all those files and
emits them topologically sorted according to their dependencies.mafia
:
Lightweight but opinionated wrapper around Cabal that makes working on
Haskell projects fun and easy.cabal-scripts
:
Collection of Bash Shell scripts for support of Cabal package development.cabalish
:
Provides access to the cabal file data for shell scripts.cab
:
A MacPorts-like maintenance command of Haskell Cabal packages.cabal-edit
:
A utility for managing Hackage dependencies from the command line.cabal-clean
:
Removes compilation artefacts in dist-newstyle/build from older versions of
the package or superseded minor versions of GHC.cabalgraph
:
Generate pretty graphs of module trees from .cabal
files.cabal-progdeps
:
Show dependencies of program being built in current directory.weeder
:
Tool for detecting redundant Cabal package dependencies that uses .hie
files introduced in GHC-8.8.packdeps
:
A library and command line tool for checking if the upper bounds in your
Cabal package's dependency list excludes the newest package available.jailbreak-cabal
:
Strip version restrictions from build dependencies in the .cabal
files.Information about how to set up Continious Integration on Haskell packages.
haskell-ci
:
Cabal package script generator for Travis CI.appveyor.yml
example:
Minimal working example of the appveyor.yml
configuration file.haskell-ci
:
Cabal package script generator for GitHub Actions CI.setup-haskell
:
Set up your GitHub Actions workflow with a specific version of Haskell (GHC
and Cabal).actions/cache
:
This action allows caching dependencies and build outputs to improve workflow
execution time.cabal-plan-bounds
:
Never write bounds manually, instead derive them from what CI is actually testing.packcheck
:
Universal build and CI testing for Haskell packages. Can produce
configurations for Travis, AppVeyor and Circle CI.cabal-cache
:
Tool for caching built cabal new-build packages.hw-ci-assist
:
CI Assistant for Haskell projects which implements package caching.docker-ghc
:
GHC + Cabal docker image.ghc-musl
:
Docker image with GHC+musl and Cabal for static executables.Cabal integration with other configuration languages and formats.
dhall-to-cabal
:
Compiles Dhall expressions to Cabal files.cabal-to-dhall
:
The opposite of dhall-to-cabal
. Compiles Cabal to Dhall expressions.cabal2nix
:
Convert Cabal files into Nix build instructions.nix2cabal
:
The opposite of cabal2nix
. It lets you define a Haskell package in Nix and
generate a Cabal file using that definition.cabal2bazel
:
A tool to help with fetching Cabal packages from Hackage and importing them
as packages into cabal2bazel
.cargo-cabal
:
A tool that helps you to turn in one command a Rust crate into a Haskell Cabal library.jenga
:
Generate a cabal.freeze
file from a stack.yaml
.stack2cabal
:
Convert stack projects to cabal.project
+ cabal.project.freeze
.shake-cabal
:
A library for using shake
alongside Cabal.Setup.hs
helpers to use in custom-setup
stanzas with the Custom
build
type.
autopack
(by Kowainik): Automatically discovers Haskell modules and populates exposed-modules
.proto-lens-setup
:
Cabal support for codegen with proto-lens
.liquidhaskell-cabal
:
Liquid Haskell integration for Cabal and Stack.liquidhaskell-cabal-demo
:
Demo of Liquid Haskell integration for Cabal and Stack.cabal-build-programs
:
Lets you use custom Cabal fields for executable dependencies.chs-cabal
:
Cabal with c2hs dependencies.ats-setup
:
ATS scripts for Cabal builds.asset-bundle
:
A build-time Cabal library that bundles executables with assets.cabal-bundle-clib
:
Bundling C/C++ projects in Cabal package made easy.cabal-toolkit
:
Helper functions for writing custom Setup.hs
scripts.quipper-cabal
:
Some functions to aid in the creation of Cabal packages for Quipper.Tools to generate system packages meta information from Haskell packages.
cabal-debian
:
Create a Debianization for a Cabal package.cabal-flatpak
:
Generate a FlatPak manifest from a Cabal package description.cabal-macosx
:
Cabal support for creating Mac OSX application bundles.cabal-rpm
:
RPM packaging tool for Haskell Cabal-based packages.cabal2spec
:
Convert Cabal files into rpm spec files.cblrepo
:
Tool to simplify managing a consistent set of Haskell packages for
distributions.exherbo-cabal
:
Generates package description from .cabal
files in format of exheres-0
for Exherbo Linux.hackport
:
A command line tool to manage an overlay of Gentoo ebuilds that are generated
from a hackage repo of Cabal packages.Helper tools for Cabal support in various Integrated Development Environments.
codex
:
A ctags file generator for Cabal project dependencies.vim-cabal-indent
:
.cabal
files indentation plugin for Vim.vim-syntax-haskell-cabal
:
Cabal syntax highlighting plugin for Vim.Haskell libraries to parse and work with files in the Cabal format.
Cabal
:
Official library to parse and analyze .cabal
files.cabal-lenses
:
Lenses and traversals for the Cabal
library.cabal-install-parsers
:
Parsers for .cabal
, cabal.project
, cabal.config
and 01-index.tar
files.cabal-file-th
:
Template Haskell expressions for reading fields from a project's cabal file.cabal-test-quickcheck
:
QuickCheck for Cabal.cabal-doctest
:
A Setup.hs helper for doctests running.doctest-extract
:
Standalone extraction of doctest code. Optionally emits a list of Test modules for insertion in a Cabal package description.simple-cabal
:
Find and read .cabal
files, and a Cabal dependency compatibility layer.cabal-file
:
Cabal file access.Work on Cabal during Google Summer of Code.
cabal new-{install,repl,run,clean,sdist}
, Cabal scripts:
Description of work to finish bringing Cabal’s Nix-style local builds (the
new- commands, at least for now) up to parity with the old stateful
methodology of using cabal-install
.cabal new-build
, also known as “Nix-style local builds”, is a new command
inspired by Nix that comes with cabal-install 1.24
.cabal-install
2.0.Improvements to the Awesome Cabal list are more than welcome. Please read the contributing guidelines, go ahead and make the difference!