|
|
|
# Brief explanation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Suppose we have
|
|
|
|
|
|
|
|
|
|
|
|
```wiki
|
|
|
|
module M where
|
|
|
|
import Data.List
|
| ... | ... | @@ -14,17 +16,25 @@ module M where |
|
|
|
The program is rejected because the occurrence of `nub` in `foo` is ambiguous. This is sometimes tiresome: a new import can force you to add extra `M.nub` qualifiers.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
An obvious alternative is that **local declarations shadow imports**, so an unqualified name means the locally-defined one. (A warning flag could tell you if you were using this ability.) This is entirely consistent with shadowing in expressions — except that you can still access at the imported thing with a qualified name.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It's not a big thing, but unless I've missed something, it seems to me that this would make the language more consistent (by treating shadowing consistently), more convenient; and of course it's completely backward compatible.
|
|
|
|
|
|
|
|
|
|
|
|
## Proposal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Local declarations shadow imports.
|
|
|
|
|
|
|
|
|
|
|
|
## Remarks
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This is a modest change. But it is a change, so only worth making if there is significant support (rather than merely absence of opposition).
|
|
|
|
|
|
|
|
|