Template Haskell fails to recognize type operator/function +
The following message is issued for a valid TH program.
Main.hs:7:1:
Illegal type constructor or class name: `+'
When splicing a TH declaration:
type instance GHC.TypeLits.+ 1 2 = 3
Failed, modules loaded: Test1.
Code attached.
The program is attempting to capture the name +, as used by Nat at the type level.
The problem appears to be in Convert.hs
-- Convert.hs
okOcc :: OccName.NameSpace -> String -> Bool
okOcc _ [] = False
okOcc ns str@(c:_) | OccName.isVarNameSpace ns = startsVarId c || startsVarSym c
| otherwise = startsConId c || startsConSym c || str == "[]"
- is rejected, by okOcc, even though it is acceptable, the symbol neither starts with upper-case, or ':'.
I have tried using reify to extract the *actual* name from other sources (rather than use mkNameG_tc), and it fails in the same way.
Trac metadata
Trac field | Value |
---|---|
Version | 7.6.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Template Haskell |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |