DuplicateRecordFields + TemplateHaskell
The DuplicateRecordFields extension works by mangling the Names of field selector functions, and treating fields specially in the renamer. Thus if you define
data T = MkT { foo :: Int }
then GHC will actually generate a selector called $sel:foo:MkT
, but will resolve foo
to refer to this selector.
In general we want this name-mangling to be internal only, but at the moment it is visible when using Template Haskell, because the TH AST doesn't have a way to represent the distinction between the selector name and the field label. For example, if you reify ''T
above and then pretty-print it you will currently get
data T = MkT { $sel:foo:MkT :: Int }
which is obviously bad.
I'm not sure how best to address this. We could represent the name as mkNameG_v pkg mod "foo"
, which will look okay when inspected, but if it is subsequently reified it might be ambiguous. Should we add a new NameFlavour
?
Trac metadata
Trac field | Value |
---|---|
Version | 7.11 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Template Haskell |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |