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

GHC ghc-devs at haskell.org
Sun Oct 28 16:41:37 UTC 2018


#15815: problem with splicing type into constraint
-------------------------------------+-------------------------------------
        Reporter:  int-e             |                Owner:  RyanGlScott
            Type:  bug               |               Status:  new
        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):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Changes (by RyanGlScott):

 * cc: goldfire (removed)
 * related:  #15760 =>
 * milestone:   => 8.6.2


Comment:

 You're right, I misspoke about #15760 fixing this issue. Forget I said
 anything about that.

 Your fix smells correct to me, and if there weren't any other extenuating
 circumstances, I'd endorse it as the one true solution. Unfortunately,
 there's a bit of a thorny issue in that this code no longer works on GHC
 8.6, and I don't see a simple way to work around the issue at the moment.
 We need to backport //something// to fix this, but the question is
 //what//.

 Alas, changing the way we desugar infix types to use `InfixT` would
 constitute a breaking change in practice, so I'm reluctant to backport
 that. There is quite a bit of code in the wild which, for better or worse,
 assumes that `InfixT` only ever appears in user written code (i.e.,
 `InfixT` never appears in desugared or reified TH ASTs). See
 [https://github.com/glguy/th-
 abstraction/blob/5123c6d054d0949cb444590269f13e5d44699ab2/src/Language/Haskell/TH/Datatype.hs#L1156-L1160
 this function] from `th-abstraction` as one example. I'm not sure what
 exactly would happen if we started feeding that function `InfixT`s, but I
 imagine that something or another would change at runtime, which would be
 awful for a point release.

 Therefore, I'm inclined to adopt the patch in comment:4 as a crude (and
 ideally, temporary) fix for this issue in an 8.6 point release (hopefully
 8.6.2), and work towards implementing your more robust solution for 8.8.
 Does that sound reasonable?

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


More information about the ghc-tickets mailing list