Relaxin the PVP with regards to adding instances

Michael Sloan mgsloan at
Thu Sep 6 11:58:05 CEST 2012

Interesting ideas!

One way to make explicit re-export pragmas less necessary would be to
ignore package-local re-exports.  This might seem funky initially,
there's precedent for involving packages with import semantics
(package-qualified imports), and this is a sensible granularity for
such judgments because it's reasonable to assume "global" knowledge of
instances inside a package.

To minimize need for explicit pragmas, we could have another variety
of module export that specifies which imports provide instances that
should be explicitly re-exported.  While the explicit pragma might
still be desirable (seems fiddly, though..), I think that this would
cover a great deal of the problems.  The syntax might look like:

module Foo(..., module instances Bar) where

import Bar

Could also think about "filtering" based on partial specifications -
"Only re-export Monad instances", "Only re-export things involving
Maybe", "Hide everything involving Maybe", etc etc.  This gets a bit
more complicated:

module Foo(..., module instances Bar(Monad, Maybe)) where

import Foo

I'm not at all sold on this more complicated one, but something along
this line might be good.


On Thu, Sep 6, 2012 at 2:10 AM, Henning Thielemann
<schlepptop at> wrote:
> Am 06.09.2012 02:43, schrieb Michael Sloan:
>> I agree that it's quite unfortunate that adding instances causes a
>> major bump.  I think that instead it would make sense to only bump
>> your major version whenever you add *orphan* instances.  This is
>> because it is known to be dangerous to create orphan instances, and
>> the errors are relatively transparent.  While I suppose it could break
>> proper dependency resolution, a big reason for upper bounds is
>> preventing a cascade of confusing errors.  With orphan instances the
>> errors are very finite.
>> In general here are a few different things that would help with the
>> orphans problem:
> There have been some ideas about explicit import of instances.
> I also had some thoughts about how GHC can help managing orphan instances
> when they are necessary:

More information about the Libraries mailing list