Is there a universal identity or zero value for folding?
Assume we can define

foldrUniversal :: Foldable t =&gt; (a -&gt; b -&gt; b) -&gt; t a -&gt; b


Then,

foo :: b
foo = foldrUniversal (\x y -&gt; y) []


Is a way to form a value for any type b. If the type system is sane, this implies that foo does not terminate, as if we recursively defined foo = foo. Otherwise, all the types would be inhabited, making the logic associated to the type system to be inconsistent. A type system that allows this would be regarded as essentially "broken".

In real world languages, we do (grudgingly) allow some unwanted inhabitants. Non-terminating values ("bottom") are common ones, since they are mandatory in language with unconstrained recursion. null values are also used in many OOP based languages -- this is a so-called "billion dollar mistake", and should be avoided. Having a way to craft a "real" value of type b (say non-null, non-bottom) from nothing is too much.