[GHC] #10478: Shorter import syntax

GHC ghc-devs at haskell.org
Mon Sep 14 13:39:43 UTC 2015


#10478: Shorter import syntax
-------------------------------------+-------------------------------------
        Reporter:  acowley           |                   Owner:
            Type:  feature request   |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  Compiler          |                 Version:  7.10.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:  Phab:D1238
-------------------------------------+-------------------------------------

Comment (by goldfire):

 Perhaps my proposal was not clearly stated. I have modified the examples
 below to support my intent. If you see an error in the proposal, please do
 let me know! My changes affect the first block and the very last line.

 >
 > Suppose the `module A` exports `x` and `y`.
 >
 > * Without a module alias:
 > ||= # =||= Haskell 2010 =||= Proposal acowley =||= Proposal goldfire
 =||= Brings into scope =||
 > ||= 1 =|| import A || **import A** || **import A** || x, y, A.x, A.y ||
 > ||= 2 =|| import A (x) || **import A (x)** || **import A (x)** || x, A.x
 ||
 > ||= 3 =|| import qualified A || **import A () as A** || **import A
 qualified** || A.x, A.y ||
 > ||= 4 =||  import qualified A (x) || **import A () as A (x)** ||
 **import A qualified (x)** || A.x ||
 >
 > * With a module alias:
 > ||= # =||= Haskell 2010 =||= Proposal acowley =||= Proposal goldfire
 =||= Brings into scope =||
 > ||= 5 =|| import A as B || **import A as B** || **import A (..)
 qualified as B** || x, y, B.x, B.y ||
 > ||= 6 =|| import A as B (x) || **import A as B (x)** || **import A (x)
 qualified as B (x)** || x, B.x ||
 > ||= 7 =|| import qualified A as B || **import A () as B** || **import A
 qualified as B** || B.x, B.y ||
 > ||= 8 =|| import qualified A as B (x) || **import A () as B (x)** ||
 **import A qualified as B (x)** || B.x ||
 >
 > * The real deal:
 > ||= # =||= Haskell 2010 =||= Proposal acowley =||= Proposal goldfire
 =||= Brings into scope =||
 > ||= 9 =|| import A (x); || **import A (x) as B** || **import A (x)
 qualified as B** || x, B.x, B.y ||
 > || || import qualified A as B ||
 > ||= 10 =|| //(impossible)// || **import A (x) as X ()** || **import A
 (x) qualified ()** || x ||
 >
 >
 > Potentially confusing things about these proposals, assuming full
 backward compatibility:
 >
 > ||= proposal =||= H2010 syntax =||= new syntax =||= Why confusing? =||
 > ||= acowley =|| **import A as B (x)** || **import A (x) as B** || look
 similar, do different things ||
 > ||= goldfire =|| **import qualified A as B (x)** || **import A (x)
 qualified as B** || look similar, do different things ||
 > ||= goldfire =|| **import qualified A** || **import A qualified** ||
 look similar, do different things ||

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10478#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list