2 Answers
2

It seems Data.Has encapsulates a lot of what you're looking for. In their vocabulary they I think that their Knows type-class is closer to your Has, and it also provides a signature for injection as well.

They also use a labeling mechanism to treat an issue that I don't think you've considered yet: records which contain fields that have the same type. They use type-level labels to do this disambiguation.

For convenience, there also seems to be some support that provides a generator for the Has instance with template Haskell in Has-TH

You can find more type-level labels and other record-relevant material in works of the Oleg the Type Magician, like OOHaskell (also with Ralf Lämmel).

Could you point me to some tutorial style documentation for Data.Has (and Has-TH for that matter). It looks roughly like what I'm looking for, but I'm not sure how to put it all together.
–
ClintonMay 4 '12 at 2:09

data-accessor-template may at least help to write the set/get accessors. Maybe some people can come up with the Template Haskell code for generation of classes and instances for every record field name.
However, I do not use the Template Haskell stuff myself. It restricts you to GHC, and even to specific GHC versions, since Template Haskell changes between different GHC versions. Having one (major) record per module really pays off.