There are 4 different issues being brought up and conflated in this thread:
* Some people are complaining about the FTP entirely.
* Some people are complaining about adding instances they don't use.
* Some people are complaining about length.
Re: FTP as a whole
The FTP on the whole was and remains overwhelmingly popular. Frankly, the vast majority, not all, but most of the users complaining in this thread are the same people who were complaining about the FTP in the first place, rehashing precisely the same arguments. The FTP itself passed with an overwhelming 82% majority. If we can't act in the presence of that large of a public majority, when _can_ we act?
Re: length
We DID see these so called "wats" when we decided the FTP. It made a small, but noticeable, dip in the acceptance rate. Before the public reaction to `length (1,2) = 1` , FTP was running at about 84% acceptance. Afterward a series of posts pushed that issue, support dipped to 82% acceptance in aggregate, and about half of the votes came in afterwards. So that is still in 80% territory, even with the weird Data.List member story, and extra members of Foldable, and every thing that was thrown against the wall looking for something that would stick. Yes, these numbers aren't factored out on all axes, and yes information diffusal wasn't perfect, but it does show the relative scale of the issue against the FTP as a whole and measurably deflate the "we didn't know about this" argument.
There is, however, a good reason to consider length a member of the Foldable class. It avoids hoisting users on the dilemma of choosing between what is portable and what is fast.
length in the class can give you O(1) answers for most containers foldl' (+) 0 always pays O(n), getSum . foldMap Sum can be at best O(log n) but will typically be O(n). The latter two always work, the former can always be selected to be the optimal version for the container in question. If no memoization is provided and no sharing is possible it can turn into the foldl' form. If sharing is possible, then it can be the foldMap form. If a size is carried for things like Data.Set or Data.Map it can be the O(1) form.
That way if you want to, say, build a toVector function that takes any Foldable container, you can use the length to size the array and get it as quickly as possible, without having to balance the choice of 3 different implementations and always having to worry that you are calling the wrong one.
Given it to do over, I might have argued harder against the camp that generalized length and null, and instead pushed to add new names, however, that has to be balanced against the fact that we'd have another raft of complaints about new symbols being taken by the Prelude, and that there really, and the fact that there wasn't an objectively 'nice' set of names available and that sniping between folks who wanted 'length' vs. something like 'flength' would likely be just as vicious today.
APIs written after the addition of length/null to Foldable can elide exporting their own length/null definitions and just use the one from the Prelude, this reduces namespace pressure and the need for qualified imports. As 7.8 falls out of the support window of more and more packages it starts to become an option to drop existing null/size/length members for many data types, similar to how some container types simply use empty from Alternative as their empty value.
Re: instances you don't use
It has already been covered in this thread that the instances in question are the only possible instance for the types involved.
The alternative is splintering the ecosystem with different sets of orphans that provide precisely the same code. I, for one, would simply put an orphan instance package at or near the bottom of the set of packages I maintain and incur a dependency from day 1 were these somehow removed. I use them throughout the code and libraries I write, and do not want to deal with the ecosystem fragmentation. That would pretty much drag them back in for a large percentage of Haskell users. This is simply a practical effect of what I'd have to do to keep the packages I ship today working together.
We've already seen folks wrestling with where to get access to newer instances we've added to base on older GHCs, and had to consolidate many efforts on a base-orphans package. The direct reverse dependency list of this fairly new package is quite small,
but the transitive dependency set is rather large. Getting it integrated has required a huge number of retrofitted version bounds on hackage and Herbert and Ryan have done yeoman's work fixing subtle build issue after build issue caused by conflicting orphan sets.
We'd wind up in a similar situation for these instances.
Removing these instances would accomplish little other than ecosystem fragmentation.
-Edward