Template Haskell thinks an unboxed tuple name is illegal to splice in
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UnboxedTuples #-}
module Bug where
import Language.Haskell.TH.Lib
import Language.Haskell.TH.Syntax
$(do let ubxTup = conT (unboxedTupleTypeName 2) `appT` conT ''Int
`appT` conT ''Int
x <- newName "x"
y <- newName "y"
[d| f :: $(ubxTup) -> $(ubxTup)
f $(conP (unboxedTupleDataName 2) [varP x, varP y])
= $(conE (unboxedTupleDataName 2) `appE` varE x
`appE` varE y)
|])
$ /opt/ghc/8.0.1/bin/ghc Bug.hs
[1 of 1] Compiling Bug ( Bug.hs, Bug.o )
Bug.hs:8:3: error:
Illegal type constructor or class name: ‘(#,#)’
When splicing a TH declaration:
f_0 :: GHC.Tuple.(#,#) GHC.Types.Int GHC.Types.Int ->
GHC.Tuple.(#,#) GHC.Types.Int GHC.Types.Int
Patch coming soon.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Template Haskell |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |