#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

Glasgow-haskell-bugs mailing list

Reply via email to