Cabal is a system for building and packaging Haskell libraries and programs. The word “cabal” can refer to either of following1:

  • CABAL (the spec): CABAL is the Common Architecture for Building Applications & Libraries. It’s a specification for defining how Haskell applications and libraries should be built, defining dependencies, etc.

  • .cabal (the file format): The file format used to write down the aforementioned definitions for a specific package.

  • Cabal (the library): The library implementing the above specification and file format.

  • cabal (the executable): The cabal executable, more accurately named cabal-install, is a commandline tool that uses Cabal (the library) to resolve dependencies from Hackage and build packages.