<html><body><p>So that we are using concrete examples.&nbsp; here is an example of a change that really shouldn't break any package:</p><p><br></p><p>https://github.com/timthelion/threadmanager/commit/c23e19cbe78cc6964f23fdb90b7029c5ae54dd35<br></p><p><br></p><p>The exposed functions are the same.&nbsp; The behavior is changed.&nbsp; But as the commiter of the change, I cannot imagine that it would break any currently working code.</p><p><br></p><p>There is another issue though.&nbsp; With this kind of change, there is no reason for a package which was written for the old version of the library, to be built with the new version.&nbsp; If I am correct, that this change changes nothing for currently working code, then why should an old package be built with the newer package?<br><br>The advantage in this case, is merely that we want to prevent version duplication.&nbsp; We don't want to waste disk space by installing every possible iteration of a library.<br></p><p><br></p><p>I personally think that disk space is so cheep, that this last consideration is not so important.&nbsp; If there are packages that only build with old versions of GHC, and old libraries, why can we not just seamlessly install them?&nbsp; One problem, is if we want to use those old libraries with new code.&nbsp; Take the example of Python2 vs Python3.&nbsp; Yes, we can seamlessly install python2 libraries, even though we use python3 normally, but we cannot MIX python2 libraries with python3 libraries.</p><p><br></p><p>Maybe we could make Haskell linkable objects smart enough that we COULD mix old with new?&nbsp; That sounds complicated.</p><p><br></p><p><span class=" name">I think, Michael Sloan is onto something though with his idea of compatibility layers.&nbsp; I think that if we could write simple "dictionary" packages that would translate old API calls to new ones, we could use old code without modification.&nbsp; This would allow us to build old libraries which normally wouldn't be compatible with something in base using a base-old-to-new dictionary package.&nbsp; Then we could use these old libraries without modification with new code.</span></p><p><br></p><p>It's important that this be possible from the side of the person USING the library, and not the library author.&nbsp;&nbsp; It's impossible to write software, if you spend all of your time waiting for someone else to update their libraries.<br></p><p><br><span class=" name"></span></p><p><span class=" name">Timothy<br></span></p><p><br></p><p>---------- Původní zpráva ----------<br>Od: Ivan Lazar Miljenovic &lt;ivan.miljenovic@gmail.com&gt;<br>Datum: 16. 8. 2012<br>Předmět: Re: [Haskell-cafe] Platform Versioning Policy: upper bounds are not our friends</p><blockquote>On 16 August 2012 20:50, Ketil Malde &lt;ketil@malde.org&gt; wrote:<br>&gt; "Bryan O'Sullivan" &lt;bos@serpentine.com&gt; writes:<br>&gt;<br>&gt;&gt; I propose that the sense of the recommendation around upper bounds in the<br>&gt;&gt; PVP be reversed: upper bounds should be specified *only when there is a<br>&gt;&gt; known problem with a new version* of a depended-upon package.<br>&gt;<br>&gt; Another advantage to this is that it's not always clear what constitutes<br>&gt; an API change.  I had to put an upper bound on binary, since 0.5<br>&gt; introduced laziness changes that broke my program.  (I later got some<br>&gt; help to implement a workaround, but binary-0.4.4 is still substantially<br>&gt; faster).  Understandably, the authors didn't see this as a breaking API<br>&gt; change.<br><br>Except 0.4 -&gt; 0.5 _is_ a major version bump according to the PVP.<br><br>&gt;<br>&gt; So, +1.<br>&gt;<br>&gt; -k<br>&gt; --<br>&gt; If I haven't seen further, it is by standing in the footprints of giants<br>&gt;<br>&gt; _______________________________________________<br>&gt; Haskell-Cafe mailing list<br>&gt; Haskell-Cafe@haskell.org<br>&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br><br><br><br>-- <br>Ivan Lazar Miljenovic<br>Ivan.Miljenovic@gmail.com<br><a href="http://IvanMiljenovic.wordpress.com">http://IvanMiljenovic.wordpress.com</a><br><br>_______________________________________________<br>Haskell-Cafe mailing list<br>Haskell-Cafe@haskell.org<br><a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a></blockquote></body></html>