Admin message

Due to a large amount of spam we do not allow new users to create repositories, they are "external" users. If you are a new user and want to create a repository, for example for forking GHC, open a new issue on ghc/ghc using the "get-verified" issue template

-XDuplicateRecordFields breaks record expression splices
``` {-# language TemplateHaskell #-} {-# language DuplicateRecordFields #-} module Lib where import Language.Haskell.TH import Language.Haskell.TH.Syntax data A = A {x :: Int, y :: String} a = A 3 "test" test = $([e|case a of A {x = b} -> b|]) ``` Without `DuplicateRecordFields` it compiles correctly so `test = 3` but with `DuplicateRecordFields` enabled it gives: ``` • Illegal variable name: ‘$sel:x:A’ When splicing a TH expression: case Lib.a of (Lib.A {Lib.$sel:x:A = b_0}) -> b_0 • In the untyped splice: $([| case a of { A {x = b} -> b } |]) ``` Additionally, there doesn't seem to be a workaround for munging the name manually, since the `$sel:x:A` name is the one actually in scope, there is no `A.x` like there would be normally, even when the label is not a duplicate. Is there a way to get around this? Ex: by changing the binding name somehow manually? <details><summary>Trac metadata</summary> | Trac field | Value | | ---------------------- | ------------ | | Version | 8.2.2 | | Type | Bug | | TypeOfFailure | OtherFailure | | Priority | normal | | Resolution | Unresolved | | Component | Compiler | | Test case | | | Differential revisions | | | BlockedBy | | | Related | | | Blocking | | | CC | | | Operating system | | | Architecture | | </details> <!-- {"blocked_by":[],"summary":"-XDuplicateRecordFields breaks record expression splices","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.2.2","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"\r\n{{{\r\n{-# language TemplateHaskell #-}\r\n{-# language DuplicateRecordFields #-}\r\nmodule Lib where\r\nimport Language.Haskell.TH\r\nimport Language.Haskell.TH.Syntax\r\n\r\ndata A = A {x :: Int, y :: String}\r\na = A 3 \"test\"\r\ntest = $([e|case a of A {x = b} -> b|])\r\n}}}\r\n\r\nWithout `DuplicateRecordFields` it compiles correctly so `test = 3` but with `DuplicateRecordFields` enabled it gives:\r\n\r\n{{{\r\n • Illegal variable name: ‘$sel:x:A’\r\n When splicing a TH expression:\r\n case Lib.a of\r\n (Lib.A {Lib.$sel:x:A = b_0}) -> b_0\r\n • In the untyped splice: $([| case a of { A {x = b} -> b } |])\r\n}}}\r\n\r\nAdditionally, there doesn't seem to be a workaround for munging the name manually, since the `$sel:x:A` name is the one actually in scope, there is no `A.x` like there would be normally, even when the label is not a duplicate.\r\n\r\nIs there a way to get around this? Ex: by changing the binding name somehow manually?\r\n","type_of_failure":"OtherFailure","blocking":[]} -->
issue