(Before I start: I'm going to use Cabal for Everything that has Cabal in its name and has something to do with Haskell.)
Having had the usual "you need to update X to install Y, but this will break dependency Z" issue again the other day, I thought I'd just ask: why was Cabal not designed to be a full package manager, especially with the following features:
- Versioning: install multiple versions of a package alongside each other, let packages pick the desired dependencies. If no package version is specified, use the latest one available.
- Update packages - or better, also install the newest version.
- Remove packages
- Check package integrity
You see where this list is going. Right now, to me Cabal feels like a somewhat sophisticated build system (try finding out which version of Base your package requires when you want to start using it for the first time), that comes with a half-baked package installer.
So the question again: Why wasn't Cabal made a full-featured build/package system? I'm sure there was some design decision that led to the current state.
(This question was somewhat inspired by a rant on Reddit, but contrary to that guy don't mean to offend anyone by the above.) :-)