
#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