Problems:
- Cabal disallows two versions of the same library being used in the same project. Related is the “diamond dependency problem.”
- Having to choose a single version of a package means all your package versions have to move in lock-step. That creates churn, and it’s not your choice to update a package, rather, some other package wants it.
- There’s no path to let end users create migration code from the old version to the new version.
- Stackage and Nix don’t presently support testing two versions of a package within one package set.
Slapping a major version on it doesn’t help. Making a new package namespace called package2 avoids all these problems.