instance visibility

Simon Marlow marlowsd at
Fri Sep 26 11:33:14 EDT 2008

Claus Reinke wrote:
>> .. I'm not trying to say that Haskell 98 only supports global 
>> instances, rather I'm saying we should think of it that way and design 
>> our libraries with global instances in mind, because otherwise we have 
>> serious problems with abstraction.
> Thinking of it that way still doesn't make it so. If you want instances
> to be global, you have to change Haskell 98, by propagating instances
> through the whole program.

Sigh.  I'm not having much luck convincing you, so let me try a 
different tack.  Here's a scenario I'd like your opinion on:

We have a test in GHC's test suite called instance-leak, which tests 
that none of the Haskell 98 libraries exports the Functor instance for 
(->).  I broke this test recently by accident.  How did I break it?  By 
using Data.Map internally in System.Process.  The Functor instance for 
(->) is exported from Control.Monad.Instances, makes its way into 
Data.Map, then into System.Process and thereby into System, which is a 
Haskell 98 module.

In your opinion, who or what is at fault for this test failure?  Think 
carefully about the ramifications of your answer.  Oh, and "Haskell 98" 
is not a valid answer, because we can't change that.


More information about the Libraries mailing list