If there is to be such a language feature, I strongly feel it should be via 
something like
               module Long.Name.M( f, g, h ) as K where ...

I do not want to try to piggy-back on the possible meaning of a self-import; 
it’s just asking for trouble, as Iavor points out.

Using “as M” in the module header would be simple.  It is easy to explain and 
fairly easy to implement.   I don’t think there are any knock-on complications. 
 So if enough people want it, and someone is prepared to implement it (with a 
language extension flag of course), then I’d be OK with that.   I’m unsure that 
it’s worth the effort, but I’m happy to let users decide.

Simon

From: Glasgow-haskell-users [mailto:glasgow-haskell-users-boun...@haskell.org] 
On Behalf Of Iavor Diatchki
Sent: 30 September 2014 13:18
To: j...@repetae.net
Cc: GHC Users Mailing List; ghc-devs; Herbert Valerio Riedel
Subject: Re: Aliasing current module qualifier


Hello,

What semantics are you using for recursive modules?  As far as I see, if you 
take a least fixed point semantics (e.g. as described in "A Formal 
Specification for the Haskell 98 Module System", 
http://yav.github.io/publications/modules98.pdf ) this program is incorrect as 
the module does not export anything.

While this may seem a bit counter intuitive at first, this semantics has the 
benefit of being precise, easily specified, and uniform (e.g it does not 
require any special treatment of the " current " module).  As an example, 
consider the following variation of your program, where I just moved the 
definition in a sperate (still recursive) module:

module A (M.x) where
  import B as M

module B (M.x) where
  import A as M
  x = True

I think that it'd be quite confusing if a single recursive module worked 
differently then a larger recursive group, but it is not at all obvious why B 
should export 'x'.  And for those who like this kind of puzzle: what should 
happen if 'A' also had a definition for 'x'?

Iavor
On Sep 29, 2014 11:02 PM, "John Meacham" 
<j...@repetae.net<mailto:j...@repetae.net>> wrote:
You don't need a new language construct, what i do is:

     module AnnoyinglyLongModuleName (M.length, M.null) where

    import AnnoyinglongLongModuleName as M

I think ghc would need to be extended a little to make this convienient as it 
doesn't handle recursive module imports as transparently.

    John

On Mon, Sep 29, 2014 at 8:47 AM, Brandon Allbery 
<allber...@gmail.com<mailto:allber...@gmail.com>> wrote:
On Mon, Sep 29, 2014 at 4:19 AM, Herbert Valerio Riedel 
<h...@gnu.org<mailto:h...@gnu.org>> wrote:
Now it'd be great if I could do the following instead:

    module AnnoyinglyLongModuleName (M.length, M.null) where

    import AnnoyinglyLongModuleName as M -- <- does not work

I think if I wanted this syntax, I'd go for:

    module AnnoyinglyLongModuleName as M where ...

--
brandon s allbery kf8nh                               sine nomine associates
allber...@gmail.com<mailto:allber...@gmail.com>                                 
 ballb...@sinenomine.net<mailto:ballb...@sinenomine.net>
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org<mailto:Glasgow-haskell-users@haskell.org>
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users



--
John Meacham - http://notanumber.net/

_______________________________________________
ghc-devs mailing list
ghc-d...@haskell.org<mailto:ghc-d...@haskell.org>
http://www.haskell.org/mailman/listinfo/ghc-devs
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to