[GHC] #7484: Template Haskell allows building invalid record fields/names
GHC
cvs-ghc at haskell.org
Thu Dec 6 14:31:12 CET 2012
#7484: Template Haskell allows building invalid record fields/names
-----------------------------+----------------------------------------------
Reporter: iustin | Owner:
Type: bug | Status: new
Priority: normal | Component: Template Haskell
Version: 7.6.1 | Keywords:
Os: Unknown/Multiple | Architecture: Unknown/Multiple
Failure: None/Unknown | Blockedby:
Blocking: | Related:
-----------------------------+----------------------------------------------
This is not really a bug, more like a unintuitive behaviour.
Due to a bug in my definitions, I was passing a name like `"opTestDelay "`
(note extra space) to a TH splice builder, which ended up with:
{{{
data OpCode
= OpTestDelay {opDelayDuration :: Double,
opDelayOnMaster :: Bool,
opDelayOnNodes :: [Ganeti.Types.NonEmptyString],
opDelayRepeat :: Ganeti.Types.NonNegative Int}
}}}
Note the double space around the first record field. This results in the
actual accessor functions having the space in the name, which makes them
unusable from normal code.
This seems to be allowed as well in other TH constructs:
{{{
λ> runQ $ return (ValD (VarP (mkName "a ") ) (NormalB (LitE (IntegerL 5)))
[])
ValD (VarP a ) (NormalB (LitE (IntegerL 5))) []
}}}
I think that names should not be allowed to contain invalid identifiers
(that would make them non-usable in normal Haskell code), but I'm not sure
- maybe TH is designed to allow you to shoot yourself in the foot indeed.
Anyway, opening this bug just in case.
Tested and behaves the same both on 6.12 and 7.6.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7484>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list