aeson icon indicating copy to clipboard operation
aeson copied to clipboard

Handle Functor Composition in Generic Instances

Open julmb opened this issue 1 year ago • 1 comments

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 GOmitFromJSON and GOmitToJSON type classes and instances
  • [x] replace S1 s * instances with single generic implementation based on GOmitFromJSON and GOmitToJSON
  • [x] investigate field omission propagation in existing instances GFromJSON a (f :.: g) and GToJSON' e a (f :.: g)
  • [x] inline recordParseJSONImpl that 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.

julmb avatar Jun 12 '24 11:06 julmb

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.

julmb avatar Dec 19 '24 12:12 julmb

Rebased to master.

julmb avatar Jul 26 '25 15:07 julmb