Proposal: Scoping rule change

Sittampalam, Ganesh ganesh.sittampalam at credit-suisse.com
Wed Jul 25 08:48:40 CEST 2012


The "... foo ..." in my example was intended to show that module M does
look up 'foo'.

 

From: Manuel M T Chakravarty [mailto:chak at cse.unsw.edu.au] 
Sent: 25 July 2012 08:26
To: Sittampalam, Ganesh
Cc: Lennart Augustsson; Haskell Prime
Subject: Re: Proposal: Scoping rule change

 

If Lennart's suggestion is combined with GHC's lazy checking for name
clashes (i.e., only check if you ever look a name up in a particular
scope), it would also work in your example.

 

Manuel

 

"Sittampalam, Ganesh" <ganesh.sittampalam at credit-suisse.com>:

	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>
[mailto:haskell-prime-bounces at haskell.org
<mailto: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
<http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html> 
	
========================================================================
======

	
	_______________________________________________
	Haskell-prime mailing list
	Haskell-prime at haskell.org <mailto:Haskell-prime at haskell.org> 
	http://www.haskell.org/mailman/listinfo/haskell-prime
<http://www.haskell.org/mailman/listinfo/haskell-prime> 

 


=============================================================================== 
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/20120725/49174cc0/attachment-0001.htm>


More information about the Haskell-prime mailing list