
On Wed, Oct 27, 2021 at 11:14:45AM -0400, Carter Schonwald wrote:
not necessarily ... there could be contradictory sets of methods! :)
like the minimal sets for Field type class, the xor would be for defining '/' in terms of reciprocal and times or vice versa (/ vs recip) and likewise (negate vs minus) etc etc
Logically redundant definitions aren't always redundant in practice if one considers performance, floating point accuracy or even sometimes divergence. For example, foldl on infinite snoc lists is not definable in terms of foldr which diverges, though admittedly I rather think that infinite snoc lists violate all reasonable expectations of a Foldable instance. So in many cases redundancy warnings would not be viable. The Eq situation is likely more the exception that the rule. The SQL NULL instances that are False for both "==" and "/=" look like they could be a mistake to me, but presumably they work out OK in practice, and I would expect that e.g. the relevant `Ord` instances do return `EQ` for `compare Null Null`... Less clear is whether the non-lawful Eq defintion is in some predicably useful way essential. -- Viktor.