Skip to content
  • Edward Z. Yang's avatar
    Support for multiple signature files in scope. · a7524eae
    Edward Z. Yang authored
    
    
    Summary:
    A common pattern when programming with signatures is to combine multiple
    signatures together (signature linking).  We achieve this by making it
    not-an-error to have multiple, distinct interface files for the same module
    name, as long as they have the same backing implementation.  When a user
    imports a module name, they get ALL matching signatures dumped into their
    scope.
    
    On the way, I refactored the module finder code, which now distinguishes
    between exact finds (when you had a 'Module') and regular finds (when
    you had a 'ModuleName').  I also refactored the package finder code to
    use a Monoid instance on LookupResult to collect together various results.
    
    ToDo: At the moment, if a signature is declared in the local package,
    it completely overrides any remote signatures.  Eventually, we'll want
    to also pull in the remote signatures (or even override the local signature,
    if the full implementation is available.)  There are bunch of ToDos in the
    code for what to do once this is done.
    
    ToDo: At the moment, whenever a module name lookup occurs in GHCi and we
    would have seen a signature, we instead continue and return the Module
    for the backing implementation.  This is correct for most cases, but there
    might be some situations where we want something a little more fine-grained
    (e.g. :browse should only list identifiers which are available through
    the in-scope signatures, and not ALL of them.)
    
    Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
    
    Test Plan: validate
    
    Reviewers: simonpj, hvr, austin
    
    Subscribers: carter, thomie
    
    Differential Revision: https://phabricator.haskell.org/D790
    
    GHC Trac Issues: #9252
    a7524eae