The Cabal
library defines how package descriptions are parsed and structured, and describe part of the process of building and installing a package. The cabal-install
package defines the cabal
application. It uses the library to effectively understand what a package description is.
This is a common structure for software: implement all your pure and reusable business logic in a library (the Cabal
library does most, but not all, of the work purely related to package descriptions), and implement all your user interface stuff and other 'details' in an application that uses the library (the cabal-install
package defines the CLI tool, and implements the details of fetching packages from Hackage).