Thinning and renaming modules from packages on the command line.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Sat, 2 Aug 2014 12:50:00 +0000 (13:50 +0100)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Tue, 5 Aug 2014 10:13:40 +0000 (03:13 -0700)
commit207875293fea07aa90efe215369629b657d1875a
tree1dbf891a340b07dc2a385225d3b81342fe461ec1
parent4accf60184dba550ef0cbdf70fa8e708a4007370
Thinning and renaming modules from packages on the command line.

Summary:
This patch set adds support for extra syntax on -package and related
arguments which allow you to thin and rename modules from a package.
For example, this argument:

    -package "base (Data.Bool as Bam, Data.List)"

adds two more modules into scope, Bam and Data.List, without adding
any of base's other modules to scope.

These flags are additive: so, for example, saying:

    -hide-all-packages -package base -package "base (Data.Bool as Bam)"

will provide both the normal bindings for modules in base, as well as
the module Bam.

There is also a new debug flag -ddump-mod-map which prints the state
of the module mapping database.  H = hidden, E = exposed (so for
example EH says the module in question is exported, but in a hidden
package.)

Module suggestions have been minorly overhauled to work better with reexports:
if you have -package "base (Data.Bool as Bam)" and mispell Bam, GHC
will suggest "Did you mean Bam (defined via package flags to be
base:Data.Bool)"; and generally you will get more accurate information.
Also, fix a bug where we suggest the -package flag when we really need
the -package-key flag.

NB: The renaming afforded here does *not* affect what wired in
symbols GHC generates.  (But it does affect implicit prelude!)

ToDo: add 'hiding' functionality, to make it easier to support the alternative
prelude use-case.

ToDo: Cabal support

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: new tests and validate

Reviewers: simonpj, simonmar, hvr, austin

Subscribers: simonmar, relrod, ezyang, carter

Differential Revision: https://phabricator.haskell.org/D113

GHC Trac Issues: #9375
29 files changed:
compiler/main/DynFlags.hs
compiler/main/Finder.lhs
compiler/main/HscMain.hs
compiler/main/HscTypes.lhs
compiler/main/Packages.lhs
docs/users_guide/glasgow_exts.xml
docs/users_guide/packages.xml
ghc/InteractiveUI.hs
ghc/Main.hs
testsuite/tests/ghci/scripts/T5979.stderr
testsuite/tests/package/Makefile [new file with mode: 0644]
testsuite/tests/package/all.T [new file with mode: 0644]
testsuite/tests/package/package01.hs [new file with mode: 0644]
testsuite/tests/package/package01e.hs [new file with mode: 0644]
testsuite/tests/package/package01e.stderr [new file with mode: 0644]
testsuite/tests/package/package02.hs [new file with mode: 0644]
testsuite/tests/package/package03.hs [new file with mode: 0644]
testsuite/tests/package/package04.hs [new file with mode: 0644]
testsuite/tests/package/package05.hs [new file with mode: 0644]
testsuite/tests/package/package06.hs [new file with mode: 0644]
testsuite/tests/package/package06e.hs [new file with mode: 0644]
testsuite/tests/package/package06e.stderr [new file with mode: 0644]
testsuite/tests/package/package07e.hs [new file with mode: 0644]
testsuite/tests/package/package07e.stderr [new file with mode: 0644]
testsuite/tests/package/package08e.hs [new file with mode: 0644]
testsuite/tests/package/package08e.stderr [new file with mode: 0644]
testsuite/tests/package/package09e.hs [new file with mode: 0644]
testsuite/tests/package/package09e.stderr [new file with mode: 0644]
testsuite/tests/package/package10.hs [new file with mode: 0644]