<div dir="ltr"><div><div><div>I believe what Sven was saying is not that the Foldable instance for tuples are given "special treatment" (which is arguably an orthogonal discussion), but rather that -XDeriveFoldable special-cases tuples, which is certainly true.<br><br></div>As Edward noted, there is one possible justification for this behavior w.r.t. things like newtype V3 a = V3 (a, a, a) deriving Foldable. But to be honest, I find this justification tenuous at best, given the confusion it causes when explaining how DeriveFunctor/DeriveFoldable/DeriveTraversable work to newcomers. Removing this special case would not only be simple, but it would also lead to a more consistent story overall.<br><br></div>I would be curious to know how much code in the wild is actually taking advantage of a trick like newtype V3 a = V3 (a, a, a) deriving Foldable. If the breakage isn't terrible, then I propose we just rip off this wart.<br><br></div><div>(This is basically a rehash of the thoughts I left at <a href="https://ghc.haskell.org/trac/ghc/ticket/13465#comment:3">https://ghc.haskell.org/trac/ghc/ticket/13465#comment:3</a>)<br></div><div><br></div>Ryan S.<br></div>