
It does a brilliant job to isolate everything (both compilers and dependency packages) and sharing a build result if it can be shared.įor example, if you already have a bytestring-0.10 that was built using base-4.8, you don’t have to build it again when it’s needed because it’s cached. Stack is actually a wrapper (plus some great deal of its own machinery) around the commands like ghc, ghci, and cabal-install. Note that you have a lot of packages that are used almost universally: bytestring, text, array, stm, unordered-containers, unix, directory, … All of them had to be built over and over again. This means building “bytestring” five times if you have five projects. Each project sandbox will begin from the zero base where most packages are not installed at all, and download/compile all libraries as they are added by the programmer.


So, we had commands like ghc, ghci, and cabal-install, and we were happier than before. (This is why you should be careful about what someone means when they say “Cabal.”)Īnd then there is cabal-install which is different from “Cabal.” cabal-install is a command line application that lets you manage Cabal-based projects. A Haskell library to parse 2 and therefore manage 1.(YAML did not exist at the time or was not popular, I think.)

A new file format to contain the aforementioned metadata.A standard way to organize your project repository and describe the project metadata like project name, repo URL, dependencies, etc.So they made “Cabal” which came to mean three things: Haskell has a very long history: Since 1987 which is long before the concept of “package managers.” When modern package management emerged, Haskellers had to invent something too. Use Hpack, and you don’t have to manually add/remove modules in the cabal file’s exposed-modules and other-modules section! A little bit of background
