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 |