[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