Proposal: Scoping rule change

Sittampalam, Ganesh ganesh.sittampalam at credit-suisse.com
Tue Jul 24 09:10:35 CEST 2012


If you're using unqualified and unrestricted imports, there's still the
risk that another module will export something you care about, e.g.

 

module M where

import I  -- currently exports foo

import J  -- might be changed in future to export foo

 

... foo ...

 

So I think you need to use import lists or qualified anyway to avoid any
risk of future name clashes - given that, does this change buy much?

 

From: haskell-prime-bounces at haskell.org
[mailto:haskell-prime-bounces at haskell.org] On Behalf Of Lennart
Augustsson
Sent: 24 July 2012 02:29
To: Haskell Prime
Subject: Proposal: Scoping rule change

 

It's not often that one gets the chance to change something as

fundamental as the scoping rules of a language.  Nevertheless, I would

like to propose a change to Haskell's scoping rules.

 

The change is quite simple.  As it is, top level entities in a module

are in the same scope as all imported entities.  I suggest that this

is changed to that the entities from the module are in an inner scope

and do not clash with imported identifiers.

 

Why?  Consider the following snippet

 

    module M where

    import I

    foo = True

 

Assume this compiles.  Now change the module I so it exports something

called foo.  After this change the module M no longer compiles since

(under the current scoping rules) the imported foo clashes with the

foo in M.

 

Pros: Module compilation becomes more robust under library changes.

Fewer imports with hiding are necessary.

 

Cons: There's the chance that you happen to define a module identifier

with the same name as something imported.  This will typically lead to

a type error, but there is a remote chance it could have the same

type.

 

Implementation status: The Mu compiler has used the scoping rule for

several years now and it works very well in practice.

 

  -- Lennart

 


=============================================================================== 
Please access the attached hyperlink for an important electronic communications disclaimer: 
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html 
=============================================================================== 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-prime/attachments/20120724/3812a757/attachment.htm>


More information about the Haskell-prime mailing list