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@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