[GHC] #10098: Refactor wild card renaming
GHC
ghc-devs at haskell.org
Tue Jun 9 05:10:18 UTC 2015
#10098: Refactor wild card renaming
-------------------------------------+-------------------------------------
Reporter: thoughtpolice | Owner: thomasw
Type: bug | Status: new
Priority: normal | Milestone: 7.12.1
Component: Compiler | Version: 7.11
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: #9922 | Blocking:
| Differential Revisions: Phab:D613
-------------------------------------+-------------------------------------
Comment (by Austin Seipp <austin@…>):
In [changeset:"058af6c90a0e8d122f2d1339b6b4fd0b5ec83d05/ghc"]:
{{{
#!CommitTicketReference repository="ghc"
revision="058af6c90a0e8d122f2d1339b6b4fd0b5ec83d05"
Refactor wild card renaming
Summary:
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: #10098
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10098#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list