[GHC] #12471: Weirdness when using quosiquoter in pattern synonyms / GADT context
GHC
ghc-devs at haskell.org
Sat Aug 6 19:11:13 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
Resolution: | Keywords:
| TemplateHaskell, PatternSynonyms,
| GADTs
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Description changed by Iceland_jack:
@@ -1,1 +1,1 @@
- ~~Using [https://hackage.haskell.org/package/applicative-
+ Using [https://hackage.haskell.org/package/applicative-
@@ -8,8 +8,2 @@
- 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
+ c :: Int -> IO Integer
+ c n = [i| fromIntegral n::Integer |]
@@ -18,1 +12,1 @@
- This works. If I replace `pure n` by `[i| n |]` I get this error:
+ This works. Removing the type annotation:
@@ -20,0 +14,6 @@
+ {{{#!hs
+ import Control.Applicative.QQ.Idiom
+
+ c :: Int -> IO Integer
+ c n = [i| fromIntegral n |]
+ }}}
@@ -21,10 +21,5 @@
- 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)
+ t0sj.hs:4:10-27: error: …
+ • Couldn't match expected type ‘IO Integer’ with actual type ‘Int’
+ • In the second argument of ‘(<*>)’, namely ‘n’
+ In the expression: (((pure fromIntegral) <*> n))
+ In an equation for ‘c’: c n = (((pure fromIntegral) <*> n))
@@ -33,8 +28,0 @@
-
- This works without the pattern synonym
-
- {{{#!hs
- c :: Exp a -> IO a
- c (I n) = [i| n |]
- }}}
- ~~
New description:
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
c :: Int -> IO Integer
c n = [i| fromIntegral n::Integer |]
}}}
This works. Removing the type annotation:
{{{#!hs
import Control.Applicative.QQ.Idiom
c :: Int -> IO Integer
c n = [i| fromIntegral n |]
}}}
{{{
t0sj.hs:4:10-27: error: …
• Couldn't match expected type ‘IO Integer’ with actual type ‘Int’
• In the second argument of ‘(<*>)’, namely ‘n’
In the expression: (((pure fromIntegral) <*> n))
In an equation for ‘c’: c n = (((pure fromIntegral) <*> n))
Compilation failed.
}}}
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12471#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list