[Haskell-cafe] Why does Haskell PVP have two values for the major version? "A.B..." and a couple other questions

Erik Hesselink hesselink at gmail.com
Tue Dec 16 11:38:07 UTC 2014

On Tue, Dec 16, 2014 at 12:23 PM, Roman Cheplyaka <roma at ro-che.info> wrote:
> On 16/12/14 13:00, Erik Hesselink wrote:
>> On Tue, Dec 16, 2014 at 11:49 AM, Roman Cheplyaka <roma at ro-che.info> wrote:
>>> On 16/12/14 12:36, Johan Tibell wrote:
>>>> On Tue, Dec 16, 2014 at 2:42 AM, Zach Moazeni <zach.moazeni at gmail.com
>>>> <mailto:zach.moazeni at gmail.com>> wrote:
>>>>     Another question, by far most packages I have encountered either
>>>>     lead with a 0 or a 1 for "A". Does that have some bearing on the
>>>>     long term stability that package users should expect in the future?
>>>> This is something that happens a lot in open source, in Haskell or
>>>> elsewhere. We We programmers are afraid of calling something 1.0,
>>>> because that somehow means "done", which we never (think we) are. :)
>>>> Lots of really stable Haskell libraries (e.g. containers) are still on
>>>> version 0.X.
>>> Upper bounds contribute to this problem, too.
>>> Suppose you've decided that 'containers' is stable enough to be at 1.0.
>>> Now all packages need to be updated, because they most probably depend
>>> on 'containers < 1' or tighter.
>>> We saw something similar with text, people got angry.
>>> If a library becomes popular before it reaches 1.0, it probably never will.
>> I don't understand this. How is bumping 'A' different from bumping
>> 'B'? You could just bump 'A' (to 1, for example) instead of 'B' when
>> you make an API breaking change, and it's no extra effort for people
>> who depend on you.
> So I need to wait till I have an API-breaking change in order to mark a
> package as stable? That's... ironic.
> Also, if the library is stable enough, people would constraint the A
> version (e.g. 'containers < 1'), asserting that their package will
> probably continue to build even under minor API-breaking changes which
> are typical for stable packages. Now, by bumping my A version for a
> minor breaking change, I'm acting exactly against their intention,
> saying "hey, this is a massive change, you'd better pay attention before
> using it". That's not what an actual stable package is supposed to do.

Is depending on an 'A' component a thing that people actually do for
libraries (other than base, perhaps)? The PVP gives no guarantees
about it, and I haven't seen any specific packages make guarantees
about it either. Without guarantees, it would probably be better for
these people to remove the bounds altogether. I do the same when e.g.
I only depend on the 'Text' type, and no functions from the package.


More information about the Haskell-Cafe mailing list