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.