infelicity in module imports
Malcolm Wallace
Malcolm.Wallace@cs.york.ac.uk
Wed, 4 Jul 2001 18:18:23 +0100
| > Currently, you are permitted to write
| >
| > import A hiding (f)
| > import B as A (f)
| >
| > and this means that everything exported from module A is visible,
| > with the exception that function `f' is overridden by a different
| > definition from module B. Here, a reference to `A.f' is resolved
| > unambiguously to `B.f'.
|
| In my understanding of the report, this is not true. Quoting from section
| 5.3 of the report
|
| "The hiding clause only applies to unqualified names. In the previous
| example, the name M.C is brought into scope."
|
| Thus, in your example, the declaration import A hiding (f) will bring
| A.f into scope and thus A.f is ambiguous!
You are possibly correct, although both nhc98 and ghc actually resolve
it in the manner I expected.
However, if you are indeed correct, then we have an even stranger
situation:
import A (g)
brings only A.g into scope, but
import A hiding (f)
brings both A.f and A.g into scope! So `hiding' is doing the opposite
of hiding, and in fact _reveals_ names.
Regards,
Malcolm