"Simon Marlow" <simonmar@microsoft.com> writes:
Simon Peyton Jones writes:
In short, an import *always* brings the entire *qualified* set of names into scope. Hiding and revealing applies only to unqualified names. I must say that I thought GHC implemented this rule; if not I should fix it.
That's not my reading of the report, and it's not what GHC implements.
import A (f)
brings only f and A.f into scope.
Whatever the correct version of this without the `qualified' term, the current GHC behaviour (and I'll confess my reading of the standard up until I spotted this discussion) that allows me to replace import qualified Foo (x, y, z) with import qualified Foo (x, y) import qualified FooFixed as Foo (z) to substitute a different module's z as Foo.z is *very* useful in practice. It seems a pity that import qualified Foo hiding (z) import qualified FooFixed as Foo (z) doesn't also do the natural thing at the moment. (It currently just ignores the `hiding (z)' so Foo.z is ambiguous.) Cheers, Chris.