Phil writes:
> GLOBAL INSTANCE PROPERTY: if an instance exists of a given
> class at a given type, this instance is in scope everywhere
> that the class and type are in scope.
>
> If this was not the case, then the point at which overloading was
> resolved (definition point or usage point) might change the meaning of
> the program. In my opinion, that would be a real disaster: adding
> extra type declarations to a program could suddenly change its
> meaning.
In general I agree with this principle, but there are occasions where
it forces you to break the abstraction barriers. I never thought
about this until I started to write larger Haskell programs. The
current module system can be a real pain when trying to maintain
barriers (as Will observed). The GIP is just a part of the whole mess :-)
-- Lennart
PS. If someone really wants an example of when the GIP hurt
me I could elaborate.