Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information