aeson
aeson copied to clipboard
Handle Functor Composition in Generic Instances
Second attempt at fixing #1059 after #1103 did not cover all cases. First discussion of the approach in https://github.com/haskell/aeson/issues/1059#issuecomment-2158531440.
Tasks:
- [x] add
GOmitFromJSONandGOmitToJSONtype classes and instances - [x] replace
S1 s *instances with single generic implementation based onGOmitFromJSONandGOmitToJSON - [x] investigate field omission propagation in existing instances
GFromJSON a (f :.: g)andGToJSON' e a (f :.: g) - [x] inline
recordParseJSONImplthat now has just a single call site - [x] add regression tests
I would be grateful for feedback by people more knowledgeable about the existing infrastructure than me.
This PR fixes #1059 (6350e9a, c56cfc1) as well as another issue (c1f6c14) that was present but inaccessible due to the inability to derive instances imvolving (:.:). The regression tests (66d68f5) cover both of these. The remaining commits (0f36b77, 5957128) are cleanup and refactoring.
Rebased to master.