Uphold AvailTC Invariant for associated data fams
authorAlec Theriault <alec.theriault@gmail.com>
Sat, 2 Feb 2019 00:26:43 +0000 (16:26 -0800)
committerAlec Theriault <alec.theriault@gmail.com>
Mon, 18 Feb 2019 15:31:18 +0000 (07:31 -0800)
commit2a431640d199b164ca5d233684d4f4bdaf5ca021
tree409b2a03bbd083dba90d9f7816f57280232b62c2
parent1ffee940a011fc75f40514696a747dd1f3d4f342
Uphold AvailTC Invariant for associated data fams

The AvailTC was not be upheld for explicit export module
export lists when the module contains associated data families.

    module A (module A) where
    class    C a  where { data T a }
    instance C () where { data T () = D }

Used to (incorrectly) report avails as `[C{C, T;}, T{D;}]`. Note that
although `T` is exported, the avail where it is the parent does _not_
list it as its first element. This avail is now correctly listed as
`[C{C, T;}, T{T, D;}]`.

This was induces a [crash in Haddock][0].

See #16077.

[0]: https://github.com/haskell/haddock/issues/979
compiler/basicTypes/Avail.hs
compiler/typecheck/TcRnExports.hs