TH's mkName fails to check namespace for built-in syntax
Consider
data T = FU | FUN
expr1 = $( conE (mkName "FU") )
expr2 = $( conE (mkName "FUN") )
expr1
compiles just fine. But expr2
fails with
• Illegal term-level use of the type constructor ‘FUN’
imported from ‘GHC.Exts’ at Scratch.hs:35:1-15
(and originally defined in ‘GHC.Prim’)
• In the expression: FUN
In an equation for ‘expr2’: expr2 = (FUN)
|
43 | expr2 = $( conE (mkName "FUN") )
|
This would appear to be because isBuiltInOcc_maybe
does not check for namespace in some cases.
Another way to make this happen:
expr3 = $( [| FU |] )
expr4 = $( [| FUN |] )
expr3
is accepted, while expr4
runs into trouble. This goes via a different code path, but ends up in isBuiltInOcc_maybe
all the same.