<p>I&#39;ve just read Semantic Versioning (SemVer) [1], Package Versioning Policy (PVP) [2] and Eternal Compatibility in Theory (ECT) [3].</p>
<p>Is PVP the one that every package on Hackage should use?<br>
SemVer seems to make more sense to me.</p>
<p>Also, ECT looks very promising, but it is dated back to 2005 and I didn&#39;t see any package using it. Why?</p>
<p>If Cabal could map the package version number to the versioned module name, there will be no need to &quot;uglify&quot; the client code. I mean, when I import module A and define in dependencies &quot;a == 1.8.3&quot;, Cabal would map that to module A_7 and bind that to the &quot;A&quot; I&#39;ve imported. We would be locked in with Cabal, but that seems to be a good tradeoff.</p>

<p>[1] <a href="http://semver.org">http://semver.org</a><br>
[2] <a href="http://www.haskell.org/haskellwiki/Pvp">http://www.haskell.org/haskellwiki/Pvp</a><br>
[3] <a href="http://www.haskell.org/haskellwiki/The_Monad.Reader/Issue2/EternalCompatibilityInTheory">http://www.haskell.org/haskellwiki/The_Monad.Reader/Issue2/EternalCompatibilityInTheory</a></p>