infelicity in module imports

Wolfgang Lux wlux@uni-muenster.de
Thu, 12 Jul 2001 10:06:44 +0200


Brian Boutel wrote

> Option 2 is closer to what the syntax of imports, read as English, sugg=
ests
> is intended, but, if it wasn't for that, I'd be promoting option 1.
> The primary purpose of being able to restrict imports is to avoid name
> clashes, and with qualified import there is no risk of a clash, so no n=
eed
> for restrictions.

This is not true since Haskell allows for the renaming of modules on =

imports. If you look at the example in section 5.3.2 of the report, =

there is the example

  module M where
    import qualified Foo as A
    import qualified Bar as A
    x =3D A.f

Obviously there is a name clash if both, Foo and Bar export symbol f.

> Even with option 2, there is scope for confusion. "Import" without
> "qualified", imports both qualified and unqualified names, but adding t=
he
> word "qualified" doesn't make any difference to the position of qualifi=
ed
> names, but instead silently fails to import unqualified names.

I don't understand what confusion you see here. What do you mean by the =

"position of names"?

> There is still a strange asymmetry, too. Whereas adding "qualified" to
> "import Modname ( a, b, c)" doesn't change which entities are imported,=
 just
> the ability to refer to them by unqualified names, adding qualified" to=

> "import Modname hiding ( a, b, c)" has the effect of importing everythi=
ng
> that was previously hidden.

I don't see that this applies to option 2. Maybe the formulation is =

still not clear enough, but in my reading (and I think this is the =

intended one) it says that the list of imported entities is the same =

regardless of whether you use qualified on the import or not. The =

qualified keyword only prevents the use of unqualified references to =

these entities. So if in your example the module Modname exports =

entities a, b, c, d, and e, then after import Modname hiding (a,b,c) =

only d and e are imported and then same is true for import qualified =

Modname hiding (a,b,c)

> Simon Peyton-Jones wrote:
> [...] =

> > There are two consistent positions
> >
> > 1. Every import of module A (no matter how constrained) imports
> > all of A's exports with qualified names.  Import of qualified names i=
s
> > unaffected by both hiding clauses and the explicit entity list
> >
> > 2. The explicit entity list, or hiding clause, for an import determin=
es
> > which
> > entities are imported.  The qualified names of all these entities are=

> > brought
> > into scope; in addition, for an unqualified import the unqualified na=
mes
> > are
> > brought into scope too.

Regards
Wolfgang

--
Wolfgang Lux				  Phone: +49-251-83-38263
Institut fuer Wirtschaftinformatik	    FAX: +49-251-83-38259
Universitaet Muenster		      Email: wlux@uni-muenster.de