I am opposed to all the hate on Foldable ((,) a). For one thing, it's the parent of the perfectly good Traversable ((,) a) instance. For another, typeclasses should be defined for every type which has a valid and sensical instance, so people don't run into "Why isn't this defined?" and having to write orphan instances for it.
For another, it just feels like the majority of it is directed at "length ('a', 1)" returning 1 instead of 2. But does anyone expect "foldr (+) 0 ('a', 1)" to return "'a'+1+0" as if that were even a thing? People don't seem to have a problem with the Functor instance for ((,) a) only mapping over the second value, and the Applicative and Monad instances treat the first argument entirely differently from the second.
It's a failure of expectations more than anything else, and I really don't think anyone beyond beginner level is routinely running into bugs because they tried to use length or toList on a tuple.