Refactor wild card renaming
Refactor wild card error reporting
- Merge HsWildcardTy and HsNamedWildcardTy into one constructor HsWildCardTy with as field the new type HsWildCardInfo, which has two constructors: AnonWildCard and NamedWildCard.
- All partial type checks are removed from RdrHsSyn.hs and are now done during renaming in order to report better error messages. When wild cards are allowed in a type, the new function rnLHsTypeWithWildCards (or rnHsSigTypeWithWildCards) should be used. This will bring the named wild cards into scope before renaming them. When this is not done, renaming will trigger "Unexpected wild card..." errors.
Unfortunately, this has to be done separately for anonymous wild cards because they are given a fresh name during renaming, so they will not cause an out-of-scope error. They are handled in tc_hs_type, as a special case of a lookup that fails.
The previous opt-out approach is replaced with an opt-in approach. No more panics because of forgotten checks!
- [t| _ |] isn't caught by the above two checks, so it is currently handled by a special case. The error message (generated in the DsM monad) doesn't provide as much context information as the other cases.
- Instead of three (!) functions that walk HsType, there is now only one pure function called collectWildCards.
- Alternative approach: catch all unwanted wild cards in rnHsTyKi by looking at the HsDocContext. This will reduce the number of places to catch unwanted wild cards form three to one, and make the error messages more uniform, albeit less informative, as the error context for renaming is not as informative as the one for type checking. A new constructor of HsDocContext will be required for pattern synonyms signatures.
Small problem: currently type-class type signatures can't be distinguished from type signatures using the HsDocContext.
This requires an update to the Haddock submodule.
Test Plan: validate
Reviewers: goldfire, simonpj, austin
Reviewed By: simonpj
Subscribers: bgamari, thomie, goldfire
Differential Revision: https://phabricator.haskell.org/D613
GHC Trac Issues: Trac #10098