Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
Source project has a limited visibility.
  • Simon Peyton Jones's avatar
    d2958bd0
    Improve typechecking of instance defaults · d2958bd0
    Simon Peyton Jones authored
    In an instance declaration when you don't specify the code for a
    method, GHC fills in from the default binding in the class.
    The type of the default method can legitmiately be ambiguous ---
    see Note [Default methods in instances] in TcInstDcls --- so
    typechecking it can be tricky.
    
    Trac #12220 showed that although we were dealing with that ambiguity
    for /vanilla/ default methods, we were not doing so for /generic/
    default methods.  Moreover we were dealing with it clumsily, by
    generating post-typechecked code.
    
    This patch fixes the bug AND deletes code!  We now use the same code
    path for both vanilla and generic default methods; and generate
    /pre-typechecked/ code in both cases.  The key trick is that we can use
    Visible Type Application to deal with the ambiguity, which wasn't
    possible before.  Hooray.
    
    There is a small hit to performance in compiler/perf/T1969 which
    consists of nothing BUT instance declarations with several default
    methods to fill, which we now have to typecheck. The actual hit is
    from 724 -> 756 or 4% in that extreme example.  Real world programs
    have vastly fewer instance decls.
    d2958bd0
    History
    Improve typechecking of instance defaults
    Simon Peyton Jones authored
    In an instance declaration when you don't specify the code for a
    method, GHC fills in from the default binding in the class.
    The type of the default method can legitmiately be ambiguous ---
    see Note [Default methods in instances] in TcInstDcls --- so
    typechecking it can be tricky.
    
    Trac #12220 showed that although we were dealing with that ambiguity
    for /vanilla/ default methods, we were not doing so for /generic/
    default methods.  Moreover we were dealing with it clumsily, by
    generating post-typechecked code.
    
    This patch fixes the bug AND deletes code!  We now use the same code
    path for both vanilla and generic default methods; and generate
    /pre-typechecked/ code in both cases.  The key trick is that we can use
    Visible Type Application to deal with the ambiguity, which wasn't
    possible before.  Hooray.
    
    There is a small hit to performance in compiler/perf/T1969 which
    consists of nothing BUT instance declarations with several default
    methods to fill, which we now have to typecheck. The actual hit is
    from 724 -> 756 or 4% in that extreme example.  Real world programs
    have vastly fewer instance decls.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.