2017-04-09 2:01 GMT+02:00 Ben Franksen <ben.franksen@online.de>:
Am 08.04.2017 um 04:03 schrieb Anthony Clayden:
> [...] So to take your examples from an earlier thread,
> what do you expect Haskell to do here?:
>
>    maximum (True,2)   =>   ?
>    minimum ((3, 4),5)   => ?   -- i.e. :: ((Int, Int), Int)
>    sum (7,3.14)   =>   ?     -- i.e. :: (Int, Double)
>    product (Left $ error "Errk")   =>   ?   -- i.e. ::
> Either e Int

I (and others) think these should be type errors.

Exactly.
 

> Do you expect Foldable (a, a) to behave differently
> vs Foldable (b, a) vs Foldable ((a, a), a) vs ...?
>
> Let's get everybody agreed on that.

It would be nice if we could all agree on removing these instances.

Yep. :-) 

BTW, I find it remarkable that of those who defend these instances, few
seem to be especially interested in clarifying the OP's question: what
laws exactly do we expect for Foldable? [...]

And even if there are laws which hold for those instances, it doesn't mean that these instances should be defined. Take e.g. Bool: One can define a "Num Bool" instance which respects the usual laws (interpreting Bool basically as a "Word1", just like Word32 etc.), but we do *not* want to have this in the standard language/libraries, and for a good reason: It would make types less useful, removing a part of the usual "If it compiles, it works" safety net...