• Edward Z. Yang's avatar
    Unify hsig and hs-boot; add preliminary "hs-boot" merging. · 06d46b1e
    Edward Z. Yang authored
    This patch drops the file level distinction between hs-boot and hsig;
    we figure out which one we are compiling based on whether or not there
    is a corresponding hs file lying around.
    To make the "import A" syntax continue to work for bare hs-boot
    files, we also introduce hs-boot merging, which takes an A.hi-boot
    and converts it to an A.hi when there is no A.hs file in scope.
    This will be generalized in Backpack to merge multiple A.hi files together;
    which means we can jettison the "load multiple interface files" functionality.
    This works automatically for --make, but for one-shot compilation
    we need a new mode: ghc --merge-requirements A will generate an A.hi/A.o
    from a local A.hi-boot file; Backpack will extend this mechanism further.
    Has Haddock submodule update to deal with change in msHsFilePath behavior.
        - This commit drops support for the hsig extension. Can
          we support it?  It's annoying because the finder code is
          written with the assumption that where there's an hs-boot
          file, there's always an hs file too.  To support hsig, you'd
          have to probe two locations.  Easier to just not support it.
        - #10333 affects us, modifying an hs-boot still doesn't trigger
        - See compiler/main/Finder.hs: this diff is very skeevy, but
          it seems to work.
        - This code cunningly doesn't drop hs-boot files from the
          "drop hs-boot files" module graph, if they don't have a
          corresponding hs file.  I have no idea if this actually is useful.
    Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
    Test Plan: validate
    Reviewers: simonpj, austin, bgamari, spinda
    Subscribers: thomie
    Differential Revision: https://phabricator.haskell.org/D1098
all.T 17.5 KB