• simonpj's avatar
    [project @ 2000-05-25 12:41:14 by simonpj] · 495ef8bd
    simonpj authored
    ~~~~~~~~~~~~
    		Apr/May 2000
    		~~~~~~~~~~~~
    
    This is a pretty big commit!  It adds stuff I've been working on
    over the last month or so.  DO NOT MERGE IT WITH 4.07!
    
    Interface file formats have changed a little; you'll need
    to make clean before remaking.
    
    						Simon PJ
    
    Recompilation checking
    ~~~~~~~~~~~~~~~~~~~~~~
    Substantial improvement in recompilation checking.  The version management
    is now entirely internal to GHC.  ghc-iface.lprl is dead!
    
    The trick is to generate the new interface file in two steps:
      - first convert Types etc to HsTypes etc, and thereby
    	build a new ParsedIface
      - then compare against the parsed (but not renamed) version of the old
    	interface file
    Doing this meant adding code to convert *to* HsSyn things, and to
    compare HsSyn things for equality.  That is the main tedious bit.
    
    Another improvement is that we now track version info for
    fixities and rules, which was missing before.
    
    
    Interface file reading
    ~~~~~~~~~~~~~~~~~~~~~~
    Make interface files reading more robust.
      * If the old interface file is unreadable, don't fail. [bug fix]
    
      * If the old interface file mentions interfaces
        that are unreadable, don't fail. [bug fix]
    
      * When we can't find the interface file,
        print the directories we are looking in.  [feature]
    
    
    Type signatures
    ~~~~~~~~~~~~~~~
      * New flag -ddump-types to print type signatures
    
    
    Type pruning
    ~~~~~~~~~~~~
    When importing
    	data T = T1 A | T2 B | T3 C
    it seems excessive to import the types A, B, C as well, unless
    the constructors T1, T2 etc are used.  A,B,C might be more types,
    and importing them may mean reading more interfaces, and so on.
     So the idea is that the renamer will just import the decl
    	data T
    unless one of the constructors is used.  This turns out to be quite
    easy to implement.  The downside is that we must make sure the
    constructors are always available if they are really needed, so
    I regard this as an experimental feature.
    
    
    Elimininate ThinAir names
    ~~~~~~~~~~~~~~~~~~~~~~~~~
    Eliminate ThinAir.lhs and all its works.  It was always a hack, and now
    the desugarer carries around an environment I think we can nuke ThinAir
    altogether.
    
    As part of this, I had to move all the Prelude RdrName defns from PrelInfo
    to PrelMods --- so I renamed PrelMods as PrelNames.
    
    I also had to move the builtinRules so that they are injected by the renamer
    (rather than appearing out of the blue in SimplCore).  This is if anything simpler.
    
    Miscellaneous
    ~~~~~~~~~~~~~
    * Tidy up the data types involved in Rules
    
    * Eliminate RnEnv.better_provenance; use Name.hasBetterProv instead
    
    * Add Unique.hasKey :: Uniquable a => a -> Unique -> Bool
      It's useful in a lot of places
    
    * Fix a bug in interface file parsing for __U[!]
    495ef8bd
HsDecls.lhs 18.6 KB