Several good points have been raised in this thread, and while I might not agree with everything, I think we can all agree on the goal: things shouldn't break so often.

So rather than keep replying to individual points, I'd like to make some concrete proposals so we can make progress.

1. Document the version numbering policy.

We should have done this earlier, but we didn't. The proposed policy, for the sake of completeness is: x.y where:

  x changes ==> API changed
  x constant but y changes ==> API extended only
  x and y constant ==> API is identical

further sub-versions may be added after the x.y, their meaning is package-defined. Ordering on versions is lexicographic, given multiple versions that satisfy a dependency Cabal will pick the latest.

2. Precise dependencies.

As suggested by various people in this thread: we change the convention so that dependencies must specify a single x.y API version, or a range of versions with an upper bound. Cabal or Hackage can refuse to accept packages that don't follow this convention (perhaps Hackage is a better place to enforce it, and Cabal should just warn, I'm not sure).

Yes, earlier I argued that not specifying precise dependencies allows some packages to continue working even when dependencies change, and that having precise dependencies means that all packages are guaranteed to break when base is updated. However, I agree that specifying precise dependencies is ultimately the right thing, we'll get better errors when things break,


There's lots more to discuss, but I think the above 2 proposals are a step in the right direction, agreed?

Cheers,
        Simon
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to