
Hi Josh, the current record-situation is not entirely satisfying, I agree. Some time ago I wrote down the approach I currently use in this gist: https://gist.github.com/mtesseract/1b69087b0aeeb6ddd7023ff05f7b7e68. In a nutshell: * I use -XDuplicateRecordFields such that I can in fact do this:
data Whole1 = Whole1 { part :: Part, ... } data Whole2 = Whole2 { part :: Part, ... }
* I prefix all record fields with an underscore. * I use lens' makeFieldsNoPrefix to generate lenses for the fields without the need to do any prefixing. * I import lenses qualified as 'L'. This means: * Different records can have the field _author (which I basically only use directly during record construction). * I usually access the author field of a record using record^.L.author. * I can use a local binding named 'author' just fine, as it clashes neither with the record field (_author), nor with the lens (L.author). Not perfect, but so far it's working fine for me. Best, Moritz