Here's a relevant commit from scalac that tiptoes through the cyclic minefield when synthesizing `unapply`. IIRC, this was thought to be an enabler to avoid the problems with case classes extending `ProductN`.

https://github.com/scala/scala/commit/a0ee6e996e602bf5729687d7301f60b340d57061