[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