[GHC] #10478: Shorter import syntax

GHC ghc-devs at haskell.org
Mon Sep 14 03:22:30 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 thomie):

 Here is an overview for two of the proposals listed on this ticket. Please
 inform me of any mistakes there might be, and I will edit this comment.

 I'm using the variant of goldfire's proposal with `(..)` instead of `*`,
 and where `(..) ` at the end of the line can be omitted.

 @goldfire: I understand your proposal would (also) be fully backward
 compatible. Please tell me on which rows you would recommend to use the
 old syntax. And maybe there's a useful trick only your proposal supports?

 Suppose the `module A` exports `x` and `y`.

 * Without a module alias:
 ||= # =||= Haskell 2010 =||= Proposal acowey || Proposal goldfire =||=
 Brings into scope =||
 || 1 || import A || **import A** || **import A (..) qualified** || x, y,
 A.x, A.y ||
 || 2 || import A (x) || **import A (x)** || **import A (..) qualified
 (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 acowey || 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 acowey || 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
 different, do the same thing ||

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


More information about the ghc-tickets mailing list