Skip to content
  • Edward Z. Yang's avatar
    Refactor package state, also fixing a module reexport bug. · 00b8f8c5
    Edward Z. Yang authored
    
    
    Instead of building a multiply indirected data structure and querying
    it on every import, we now have two data structures moduleToPkgConf
    and moduleToPkgConfAll.  moduleToPkgConf is a single-level UniqFM that
    is intended to be used for most valid imports; however, it does not
    contain any information useful for error reporting.  If an error is
    occurred, we then query moduleToPkgConfAll, which contains a more
    comprehensive view of the package database.  This field is lazily
    initialized (so this means we're retaining the package database list,
    but this should be fine because we're already maintaining the entries
    of the list.)  Additionally, the full view doesn't keep track of a boolean
    toggle for visibility/exposure anymore, but instead tracks the *provenance*
    of how the module binding came to be (the ModuleOrigin data type).
    
    Additionally, we move the logic for determining if a module is exposed
    or not from Finder.lhs and put it in Packages.lhs; this information is
    communicated via the LookupResult data type.  Unfortunately, we can't
    directly return a FindResult, because this data type is defined in
    HscTypes which depends on Packages.  This is going to change some more
    in the near future when I add thinning/renaming to package flags; the
    error messages will need to be more flexible.
    
    I've also slightly changed the semantics of error messages for package
    qualified imports.  Previously, if we didn't find any package qualified
    imports, but there were hidden modules in a *different* package, the error
    message would prefer mentioning those as opposed to providing suggestions.
    Now, if a module is hidden but in the wrong package, we won't mention it;
    instead, it will get mentioned with the other module suggestions.  I
    was too lazy to write a test, but I can add one if people would like.
    
    The module reexport bug was, package q reexported p:P as Conflict,
    and package r reexported p:P2 as Conflict, this was *not* reported as
    a conflict, because the old logic incorrectly decided that P and P2 were
    the same module on account of being from the same package.  The logic here
    has been corrected.
    
    Contains haddock submodule update.
    
    Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
    00b8f8c5