
30 Mar
2021
30 Mar
'21
3:58 a.m.
El Tue, Mar 30, 2021 at 07:27:11AM +0000, Tom Smeding escribió:
Hi Cafe,
With this class definition with this instance:
class C a where instance C b => C (a, b)
GHC can of course infer, given 'C b', that 'C (a, b)'. This is nothing more than the meaning of the instance declaration above.
However, GHC cannot infer the inverse:
Because the inverse doesn't need to hold. A priori, nothing prevents the existence of (a, b) instances where b isn't an instance. For example, if Ord a and Ord b hold, then Ord (a, b) holds, but not the opposite. If, for example, you have Ord a but not Ord b, you can make (a, b) an instance of Ord by simply defining (a1, b1) `compare` (a2, b2) = a1 `compare` a2. Best, Antonio