[GHC] #15815: problem with splicing type into constraint

GHC ghc-devs at haskell.org
Mon Oct 29 19:10:35 UTC 2018


#15815: problem with splicing type into constraint
-------------------------------------+-------------------------------------
        Reporter:  int-e             |                Owner:  RyanGlScott
            Type:  bug               |               Status:  patch
        Priority:  highest           |            Milestone:  8.6.2
       Component:  Template Haskell  |              Version:  8.6.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D5274
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"b8a797ecc34a309bd78f5a290e3554642a3a478a/ghc" b8a797e/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="b8a797ecc34a309bd78f5a290e3554642a3a478a"
 Fix #15815 by parenthesizing the arguments to infix ~

 An unfortunate consequence of commit
 b9483981d128f55d8dae3f434f49fa6b5b30c779 (`Remove HsEqTy and XEqTy`)
 is infix uses of `~` in TH quotes now desugar differently than
 before. In particular, we have that:

 ```haskell
 a ~ (Int -> Int)
 ```

 Now desugars to:

 ```haskell
 HsOpTy a (~) (HsOpTy Int (->) Int)
 ```

 Which GHC interprets as being:

 ```haskell
 a ~ Int -> Int
 ```

 Or, equivalently:

 ```haskell
 (a ~ Int) -> Int
 ```

 Which is different than what was intended! This is the cause
 of #15815.

 All of this has revealed that we likely need to renovate the way we
 desugar infix type operators to be more consistent with the treatment
 for infix expressions (see
 https://ghc.haskell.org/trac/ghc/ticket/15815#comment:5 for more on
 this.) Doing so would constitute a breaking change, however, so we
 will likely want to wait until another major GHC release to do this.

 In the meantime, this patch offers a non-invasive change to the way
 that infix uses of `~` are desugared. This makes the program
 in #15815 compile again by inserting extra `HsParTy`s around the
 arguments to `~` if they are lacking them.

 Test Plan: make test TEST=T15815

 Reviewers: int-index, goldfire, bgamari

 Reviewed By: int-index

 Subscribers: int-e, rwbarton, carter

 GHC Trac Issues: #15815

 Differential Revision: https://phabricator.haskell.org/D5274
 }}}

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15815#comment:11>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list