duncan.coutts at worc.ox.ac.uk
Fri Sep 26 17:41:27 EDT 2008
On Fri, 2008-09-26 at 21:51 +0100, Simon Marlow wrote:
> You will argue that they have control over what they import, and can
> thereby control whether they export the instance. This is certainly
> true, but it ignores the need for module abstraction: the need to be
> able to change the implementation of a module without changing its API.
> We must have the property that the imports of a module do not affect
> its API - and the only way to have this property is to avoid orphan
> instances in library APIs.
> (hmm, I finally feel like I've explained this clearly. I hope it comes
> across that way.)
Yes, I think that's a clear explanation and one I think is quite
> There are basically only two sensible choices for the Functor instance
> for (->):
> (a) don't define one at all
> (b) define one in Control.Monad, and give up on Haskell 98 compliance
> The current situation, namely
> (c) define it as an orphan, and give up on module abstraction
> is not a sensible choice.
No orphan instances in libraries.
More information about the Libraries