[GHC] #12471: Weirdness when using quosiquoter in pattern synonyms / GADT context

GHC ghc-devs at haskell.org
Sat Aug 6 18:54:56 UTC 2016


#12471: Weirdness when using quosiquoter in pattern synonyms / GADT context
-------------------------------------+-------------------------------------
           Reporter:  Iceland_jack   |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.0.1
           Keywords:                 |  Operating System:  Unknown/Multiple
  TemplateHaskell, PatternSynonyms,  |
  GADTs                              |
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 Using [https://hackage.haskell.org/package/applicative-
 quoters-0.1.0.8/docs/Control-Applicative-QQ-Idiom.html idiom brackets], is
 this a bug?

 {{{#!hs
 import Control.Applicative.QQ.Idiom

 data Exp a where
   I :: Int -> Exp Int

 pattern MkI :: Int ~ a => a -> Exp a
 pattern MkI a = I a

 c :: Exp a -> IO a
 c (MkI n) = pure n
 }}}

 This works. If I replace `pure n` by `[i| n |]` I get this error:

 {{{
 tKTa.hs:10:4-8: error: …
     • Couldn't match type ‘a’ with ‘Int’ arising from a pattern
       ‘a’ is a rigid type variable bound by
         the type signature for:
           c :: forall a. Exp a -> IO a
         at /tmp/tKTa.hs:9:6
     • In the pattern: MkI n
       In an equation for ‘c’: c (MkI n) = (pure n)
     • Relevant bindings include
         c :: Exp a -> IO a (bound at /tmp/tKTa.hs:10:1)
 Compilation failed.
 }}}

 This works without the pattern synonym

 {{{#!hs
 c :: Exp a -> IO a
 c (I n) = [i| n |]
 }}}

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


More information about the ghc-tickets mailing list