
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.
-mgsloan
On Thu, Sep 6, 2012 at 2:10 AM, Henning Thielemann
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: http://www.haskell.org/pipermail/haskell-cafe/2011-July/094014.html