instance visibility (was: Re: The base library and GHC 6.10)

David Menendez dave at zednenem.com
Wed Sep 24 17:32:10 EDT 2008


On Wed, Sep 24, 2008 at 5:18 PM, Jonathan Cast
<jonathanccast at fastmail.fm> wrote:
>
> Right.  I (of course) take the global view as axiomatic, and I view
> Haskell 98's implementation something like this:
>
> If an instance is defined (somewhere in existence), then it should be in
> scope everywhere.  This is indistinguishable, in practice, from being in
> scope everywhere the class and type are both in scope.  However,
> implementing this would require the implementation to search *every*
> module with an orphan instance when looking for instances.
> (Conceptually, this should include all of Hackage; if you use an
> instance from a package, but nothing else, under --make (or -e or -i)
> that package should (in principle) still be found and linked in.)
> Presumably, it's easier to only search the modules you've imported for
> instances.  So a compromise is adopted: modules imported (directly or
> indirectly) have to be searched, but other modules can safely be
> ignored.
>
> So I view refusing to import one module so you can define/import a
> conflicting instance as deliberate exploitation of a
> mis-feature/limitation of the language.

Another reason to prefer the global interpretation of instances is
that it allows for more efficient, non-dictionary-passing
implementations of type classes. Both JHC's type-case and Mark Jones's
partial evaluation techniques require instances that are the same
everywhere.

-- 
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>


More information about the Libraries mailing list