PVP proposal: don't require major version bump when adding non-orphan instances

Edward Kmett ekmett at gmail.com
Wed Feb 26 21:20:47 UTC 2014

Well, at the time I wrote that package vector was kind of out in left field
and considered a 'big' dependency by many people. How perspectives change.

It was originally written because Data.Vector.Vector used to have no
instances for Foldable, Traversable, Monad, etc. and Roman at the time was
against adding them, as they had comparatively low performance.

It accreted the rest of the instances necessary for working with my other
packages after it had already come into existence, largely due to the fact
that my packages at the time were all struggling to have a separate Haskell
98 core, and adding Vector instances immediately destroyed that ambition.

Eventually Roman relented on adding the instances for the base classes, and
I was left with a hollow shell of a package full of orphans.

Moreover, as time has worn on the noises of people who want a simpler
dependency structure resonates better with me than than the noises of folks
who want me to maintain 4x as many packages to maintain distinctions that
literally nobody is using. So I've started collapsing many packages
together (many of my 4.0 updates were for this purpose).

Finally, vector moved into the platform.

So upon reflection, all of the reasons for the creation of that package are
out dated. I'll look into just doing the dependency-inversion and moving
the remaining instances for my classes out to the libraries defining them
when I can muster that much willpower. ;)

Another package I had orphaned a bunch of instances on was aeson. Now that
that too is platformed, I feel less guilty about depending on it directly.

*tl;dr* Rambling historical musings on why my vector-instances package is
now a bad idea.

I'm just a flat +1 on this proposal now, no caveats.

On Wed, Feb 26, 2014 at 3:12 PM, Yitzchak Gale <gale at sefer.org> wrote:

> Edward Kmett wrote:
> > There may be some quibbling I'd take with the language though for the
> case
> > where you have a package with classes and a package that has orphans for
> > those classes for a package that was too burdensome to add as a
> dependency
> > for the base package, both under the control of the same maintainer.
> > (Mutatis mutandis for data types)
> >
> > An example would be vector-instances. As I control both it, and most of
> the
> > packages it makes orphans for, I'm simply constraining myself from not
> > releasing versions of those packages with conflicting instances unless I
> > bump them out of bounds.
> >
> > I'd like to find a way to spell this out in clearer PVP'ese, but it is
> the
> > way in which I'm most likely to be PVP non-compliant in the future.
> Would it help to make an exception for "standards-track" libraries
> like vector? In that case, orphan instances are expected to be
> only temporarily orphan. Hopefully, they will all eventually make
> their way to their permanent homes.
> Thanks,
> Yitz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140226/ad34f1db/attachment.html>

More information about the Libraries mailing list