• Edward Z. Yang's avatar
    Thinning and renaming modules from packages on the command line. · 20787529
    Edward Z. Yang authored
    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
    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: default avatarEdward 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