TH gives "Illegal binding of built-in syntax" error
If you try to splice in a definition that borrows an already existing Name using Template Haskell, GHC gives a confusing error message:
{-# LANGUAGE TemplateHaskell #-}
module Bug where
import Language.Haskell.TH
$(pure [ValD (VarP 'succ) (NormalB (ConE 'True)) []])
$ /opt/ghc/8.2.1/bin/runghc Bug.hs
Bug.hs:6:3: error: Illegal binding of built-in syntax: succ
|
6 | $(pure [ValD (VarP 'succ) (NormalB (ConE 'True)) []])
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
I'm not exactly sure what should happen here. My hunch was that my spliced-in succ would shadow the succ that's already in-scope. But in any case, the error message you get currently is quite awful, so at the very least that should be improved.
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 |