• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
  • License
    Creative Commons ...
  • Created almost 5 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ’ซ A curated list of awesome resources for the Haskell Cabal build tool.

Awesome Cabal

Awesome

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.

Table of Contents

Resources

Installation

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.
  • HVR ppa: PPA for Ubuntu that includes releases of Cabal.
  • Windows setup: The easiest way to setup a Haskell environment on Windows using Chocolatey.
  • Download binary: Install Cabal on all operating systems from sources or by downloading the binary.
  • CabalChoco: Chocolatey sources for pure Cabal installs on Windows.
  • Debian packages: Install packages built specifically for Debian 9 (Stretch).
  • macOS setup: Python script to install Cabal on macOS.
  • ghcups: ghcup for PowerShell on Windows.

Blog posts

Introduction

Write-ups and examples that could help to get into Cabal and start using it.

Scaffolding

  • Quick start: Using 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.

  • Docs: Official documentation on the package description format.
  • CHANGELOG: Package description format specification history.
  • Minimal cabal files: Explanation of the minimal possible cabal configuration.
  • cabal-fmt: CLI tool to format .cabal files.
  • cabal-info: Simple command-line interface to read and output information from the .cabal file. (archived, Cabal-1.x only)

Components

Useful information on various Cabal components. These could be useful blog posts on specific features, or description of handy parts of the Cabal specification.

  • Common Stanzas: Blog post about Cabal's common stanzas feature.
  • Multiple Libraries: Blog post about Cabal's multiple libraries feature.
  • Foreign libraries: Blog post about Cabal's foreign libraries feature.
  • Foreign libraries example: Example usage of foreign libraries.
  • source-repository-package: Specifying packages from remote version control locations (e.g. how to use GitHub dependencies in the Cabal packages).
  • cabal gen-bounds: A command to generate lower and upper bounds for dependencies in the .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.
  • Mix-ins: Usage of the Cabal's mixin feature to replace default Prelude.

Backpack

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.

Official documentation

Tutorials

Libraries

Talks

PVP

It is recommended for Haskell packages to follow PvP โ€” Package versioning Policy.

  • PVP: Official Haskell documentation on versioning.
  • 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.

Cabal Assistants

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.
  • Haskell package QA: New things in Haskell package QA.
  • 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.

Dependencies analysers

  • 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.

CI

Information about how to set up Continious Integration on Haskell packages.

Travis

AppVeyor

GitHub Actions

  • Dead simple cross-platform GitHub Actions for Haskell: Blog post about cross-platform GitHub Actions CI settings for Haskell projects with Cabal and Stack.
  • 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.

Circle CI

  • Circle CI orbs: Haskell Orb that Builds a Haskell application using Cabal on Circle CI.

Generic CI

  • 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

Deployment

Integration

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.
  • 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.

Custom Setup

Setup.hs helpers to use in custom-setup stanzas with the Custom build type.

OS Manifests

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.

IDE

Helper tools for Cabal support in various Integrated Development Environments.

Cross Compilation

Cabal for Development

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.

Cabal in GSoC

Work on Cabal during Google Summer of Code.

  • GSoC 2018: 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.
  • GSoC Cabal Nix: How bringing Nix-style package management facilities to cabal can solve various cabal problems and help in effective mitigation of cabal hell.

History

  • Old Cabal: Really old Cabal stuff.
  • Announcing New Cabal: 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 2.0: What's new in Cabal and cabal-install 2.0.

Community

Contribute to this repository

Improvements to the Awesome Cabal list are more than welcome. Please read the contributing guidelines, go ahead and make the difference!

License

CC0

More Repositories

1

learn4haskell

๐Ÿ‘ฉโ€๐Ÿซ ๐Ÿ‘จโ€๐Ÿซ Learn Haskell basics in 4 pull requests
Haskell
992
star
2

relude

๐ŸŒ€ Safe, performant, user-friendly and lightweight Haskell standard library
Haskell
698
star
3

summoner

๐Ÿ”ฎ ๐Ÿ”ง Tool for scaffolding batteries-included production-level Haskell projects
Haskell
695
star
4

stan

๐Ÿ•ต๏ธ Haskell STatic ANalyser
Haskell
565
star
5

cake-slayer

๐Ÿฐ๐Ÿ”ช Architecture of Haskell backend applications
Haskell
131
star
6

tomland

๐Ÿ Bidirectional TOML serialization
Haskell
122
star
7

typerep-map

โšก๏ธEfficient implementation of Map with types as keys
Haskell
100
star
8

hit-on

:octocat: Kowainik Git Workflow Helper Tool
Haskell
76
star
9

prolens

๐Ÿ‘“ Profunctor based lightweight implementation of Lenses
Haskell
74
star
10

smuggler

๐Ÿšฃ Smuggle all imports
Haskell
71
star
11

shellmet

๐Ÿš Out of the shell solution for scripting in Haskell
Haskell
70
star
12

policeman

๐Ÿ‘ฎ Haskell PVP adviser
Haskell
69
star
13

validation-selective

๐Ÿ’‚โ€โ™‚๏ธ Lightweight pure validation based on Applicative and Selective functors
Haskell
66
star
14

colourista

โ€Ž๏ธโ€๐ŸŒˆ Convenient interface for printing colourful messages
Haskell
66
star
15

treap

๐Ÿƒ ๐ŸŒณ ๐Ÿ‚ Efficient implementation of the implicit treap data structure
Haskell
63
star
16

membrain

๐Ÿง  Type-safe memory units
Haskell
61
star
17

issue-wanted

๐Ÿท Web application to help beginners to start contributing into Haskell projects
Haskell
59
star
18

eio

๐ŸŽฏ IO with Exceptions tracked on the type-level
Haskell
58
star
19

type-errors-pretty

๐Ÿ’„๐Ÿž Combinators for writing pretty type errors easily
Haskell
55
star
20

extensions

๐Ÿ‘… Parse Haskell Language Extensions
Haskell
48
star
21

awesome-haskell-sponsorship

๐Ÿ’ Haskell profiles to sponsor
47
star
22

slist

โ™พ๏ธ Sized list
Haskell
46
star
23

autopack

๐Ÿ“ฆ Custom Setup to automate package modules discovery
Haskell
32
star
24

containers-backpack

๐ŸŽ’ Backpack interface for containers
Haskell
32
star
25

kowainik.github.io

๐ŸŽ‚ Kowainik web page
HTML
30
star
26

hintman

๐Ÿ”ซ GitHub application to suggest hints
Haskell
27
star
27

unlift

๐Ÿ›— Typeclass for monads that can be unlifted to arbitrary base monads
Haskell
25
star
28

idris-patricia

๐ŸŒ‹ Idris implementation of patricia tree
Idris
22
star
29

org

๐Ÿ“œ ๐Ÿ“’ Place for organization guidelines and workflows
Mustache
21
star
30

life-sync

๐Ÿ”„ Synchronize personal configs across multiple machines
Haskell
21
star
31

trial

โš–๏ธ Trial Data Type
Haskell
20
star
32

piece-of-cake-slayer

๐Ÿฐ๐ŸดTemplate project based on the cake-slayer architecture library
Haskell
19
star
33

first-class-patterns

First class patterns and pattern matching, using type families
Haskell
17
star
34

hakyll-shortcut-links

โœ‚๏ธ Hakyll shortcut-links in markdown files
Haskell
11
star
35

crocodealer

๐ŸŠ Manage GitHub organization files, labels, issues
Haskell
9
star
36

amicabal

๐Ÿฅฐ Friendly Haskell config format (cabal) helper and linter
Haskell
9
star
37

shortcut-links

๐Ÿ–‡๏ธ Link shortcuts for use in text markup
Haskell
8
star
38

github-graphql

๐Ÿ•ธ๏ธ GraphQL bindings to GitHub API
Haskell
7
star
39

.github

๐Ÿ’Š Default health files
7
star
40

seaweed

๐ŸŒŠ Create your fancy CV in different formats
Haskell
5
star
41

toml-benchmarks

๐Ÿ“Š Benchmarks for Haskell TOML decoding and encoding libraries
Haskell
4
star
42

outdator

Haskell outdated dependencies bot
Haskell
3
star
43

stan-action

GitHub Action for Stan โ€“โ€“ Haskell Static Analysis tool
Dockerfile
3
star
44

hintman-target

Target dummy for hintman
Haskell
3
star
45

hash-store

Hash as cache
Haskell
2
star
46

treasure-keeper

๐Ÿ’ฐ Accounting tool
Haskell
2
star
47

ppa

Ubuntu PPAs for Kowainik tools
Makefile
1
star
48

stack-full

See README for more info
Haskell
1
star
49

tomlerone

๐Ÿ—ป Tomland Online: TOML format online checker based on tomland library
Haskell
1
star
50

mysql-not-so-simple

MySQL not so simple
Haskell
1
star
51

cabal-full

See README for more info
Haskell
1
star
52

app-version

Get your application version
Haskell
1
star