[Haskell-cafe] PVP question

Erik Hesselink hesselink at gmail.com
Mon Dec 15 20:28:44 UTC 2014

I've always understood the PVP to be meant to prevent (almost?) all
breakage, provided you follow the right relation between your imports
and dependency version ranges:

 * If you depend on a range of minor versions (x.y.*), you should use
only qualified or explicit imports.
 * If you depend on a range of bugfix versions (x.y.z.*), you can use
implicit imports.

That is why adding a function is a minor version bump, and not a
bugfix: it can break people using implicit imports.

In this case, theoretically you could break people's code, if it is
something like this:

    f = myFunction >>= print

However, since the return type is (), I doubt anyone is doing this,
and I'd go for the pragmatic approach and make this change in a minor
(or even bugfix) version.


On Mon, Dec 15, 2014 at 6:10 PM, Roman Cheplyaka <roma at ro-che.info> wrote:
> Almost any API change can break existing code.
> For example, adding a new function can break code.
> I thought the guiding principle for PVP was how likely it is that a
> piece of client code will break, not if that's theoretically possible.
> On 15/12/14 11:44, Johan Tibell wrote:
>> I think the question is: can this change cause existing code to stop
>> compiling (perhaps assuming people aren't using -Werror)? I don't think
>> it can but perhaps generalizing the type could make type inference fail
>> somewhere due to an ambiguous type.
>> We really need a PVP guide that just lists lots of examples, each with a
>> note of what kind of change it is (i.e. major, minor, or patch).
>> On Mon, Dec 15, 2014 at 10:00 AM, Michael Snoyman <michael at snoyman.com
>> <mailto:michael at snoyman.com>> wrote:
>>     I'm a little bit uncertain of the PVP guidelines in a certain
>>     case[1], so I'd like to get some guidance/clarity. Suppose I have a
>>     library which provides the function:
>>     myFunction :: IO ()
>>     myFunction = forever $ putStrLn "Still here" >> threadDelay 10^6
>>     Later, I realize (or someone points out to me) that I've
>>     over-specified the type signature, and really myFunction should be:
>>         myFunction :: IO a
>>     In this case, does the PVP specify that we should have a minor or a
>>     major version bump? I'm not certain if this counts as a breaking
>>     change or not.
>>     [1] https://github.com/fpco/streaming-commons/pull/13
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list