| Haskell's package repository, Hackage, changes very rapidly. The best policy that exists today for determining whether packages will work together, the Package Versioning Policy, is a bit like Semantic Versioning. This allows you some chance in hell of finding compatible packages, but it's very low information and often fails. This is exacerbated by a few things 1. Due to static typing package combination errors are detected at compile time not runtime. This means that potential mismatches in package versions are detected and punished very early and very severely. This is why Cabal compares so disfavorably to NPM. It's not that NPM is more advanced, it's that Cabal tries harder to ensure that package mismatches don't survive build. 2. There are differences in opinion on the right place to put burden of package matching—should the maintainers exhaustively test things and maintain accurate and complete information at all times? Or should people just tell them quickly when things break. Unfortunately, these two methods of handling versioning don't live together nicely and they wreck havoc for the solver. 3. Haskell as a language strongly promotes chunking off nice, trustworthy abstractions and squirreling them away into their own package. This means that there are a lot of packages all versioning against one another and the package matching problem is quite large. So, atop this a few "curated sets" have been built which push the package managing troubles to someone else---namely a build farm where, arguably, it ought to be. These sacrifice bleeding edge availability for a bit less personal burden finding compatible package sets. The two I use are called Stackage and Nixpkgs. Stackage is in particular supported by the company FPComplete and FPComplete sells Haskell solutions to industry. They are therefore well-interested in providing a support solution for stable sets of packages from Stackage. This may even just be a formalization of what they already do since they probably cannot justify code breakages to customers as "well, the state of the art of libraries keeps changing". As far as I can tell these LTS package sets are stable points in the master package set which will receive bugfixes and unquestionably unbreaking feature updates alone. In terms of the PVP, they can receive minor version bumps but are protected against major ones. Stackage is a rather massive set of packages, so this is done in a pretty conservative manner and it seems reasonably experimental at the moment. https://www.fpcomplete.com/blog/2014/12/backporting-bug-fixe... In particular, it'll come down to the willingness of library maintainers to backport bugfixes to prior major versions of their libraries. Good library maintainers have support windows they care about already, but not everyone has the resources to pull that off. LTS will feel this differential effect. Anyway, hopefully that's a good, reasonably correct overview. Corrections welcome. |
I think this happens because so much that's used by everything isn't a part of the standard library (text, containers, mtl).
There are upsides and downsides to that.