• Simon Peyton Jones's avatar
    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
TcInstDcls.hs 74.5 KB