Re: [GHC] #7484: Template Haskell allows building invalid record fields/names
#7484: Template Haskell allows building invalid record fields/names -+-- Reporter: iustin| Owner: Type: bug | Status: new Priority: normal| Milestone: Component: Template Haskell | Version: 7.6.1 Keywords:| Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown |Testcase: Blockedby:|Blocking: Related:| -+-- Comment(by igloo): The problem with doing the check in `mkName` is that it would still be possible to make a variable that starts with a capital letter, or a constructor that starts with a lower case letter. -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7484#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler ___ Glasgow-haskell-bugs mailing list Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
[GHC] #7484: Template Haskell allows building invalid record fields/names
#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 Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
Re: [GHC] #7484: Template Haskell allows building invalid record fields/names
#7484: Template Haskell allows building invalid record fields/names -+-- Reporter: iustin| Owner: Type: bug | Status: new Priority: normal| Milestone: Component: Template Haskell | Version: 7.6.1 Keywords:| Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown |Testcase: Blockedby:|Blocking: Related:| -+-- Changes (by simonpj): * difficulty: = Unknown Comment: Yes I see that. What would you like? Should `mkName` fail (by calling `error`) when given an illegal name? I wonder if some people might use an illegal name specificaly to ''avoid'' the danger of accidental capture? (Though you can always use `newName` for that.) Perhaps it would suffice to reject spaces in names, becuase that is perhaps particularly confusing. Simon -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7484#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler ___ Glasgow-haskell-bugs mailing list Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
Re: [GHC] #7484: Template Haskell allows building invalid record fields/names
#7484: Template Haskell allows building invalid record fields/names -+-- Reporter: iustin| Owner: Type: bug | Status: new Priority: normal| Milestone: Component: Template Haskell | Version: 7.6.1 Keywords:| Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown |Testcase: Blockedby:|Blocking: Related:| -+-- Comment(by iustin): Replying to [comment:1 simonpj]: Yes I see that. What would you like? Should `mkName` fail (by calling `error`) when given an illegal name? Yes, I think that makes sense (and is appropriate). I wonder if some people might use an illegal name specificaly to ''avoid'' the danger of accidental capture? (Though you can always use `newName` for that.) That would be a very ugly way of solving the problem. Since `newName` exists and works well, I don't see a problem against moving to that (if anyone relies on such behaviour). Perhaps it would suffice to reject spaces in names, becuase that is perhaps particularly confusing. Indeed. I don't know how difficult is to decide whether a name is correct versus simply checking for spaces; ideally names should be well- formed, but if spaces are much easier to detect, doing just space-checks is already an improvement. Thanks! Iustin -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7484#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler ___ Glasgow-haskell-bugs mailing list Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs