<div dir="auto">Note that it is probably just missing some `error` calls in the right place.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 12, 2021, 13:27 chessai <<a href="mailto:chessai1996@gmail.com">chessai1996@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am +1 on these instances existing, but I just discovered via<br>
quickcheck-classes that the given code does not uphold succ-pred or<br>
pred-succ identity:<br>
<br>
```<br>
Enum: Succ Pred Identity *** Failed! Falsified (after 2 tests):<br>
  Description: succ (pred x) = x<br>
  a = (0,1)<br>
  succ (pred x) = (-1,1)<br>
Enum: Pred Succ Identity *** Failed! Falsified (after 1 test):<br>
  Description: pred (succ x) = x<br>
  a = (0,0)<br>
  pred (succ x) = (1,0)<br>
*** Failed! Falsified (after 2 tests)..<br>
       Enum: Succ Pred Identity *** Failed! Falsified (after 2 tests):<br>
  Description: succ (pred x) = x<br>
  a = Left 0<br>
  succ (pred x) = Right (-9223372036854775808)<br>
Enum: Pred Succ Identity *** Failed! Falsified (after 1 test):<br>
  Description: pred (succ x) = x<br>
  a = Left 0<br>
  pred (succ x) = Right (-9223372036854775808)<br>
```<br>
<br>
Perhaps this is indicative of something wrong with the proposed instance?<br>
<br>
Thanks<br>
<br>
On Wed, May 12, 2021 at 11:01 AM Henning Thielemann<br>
<<a href="mailto:lemming@henning-thielemann.de" target="_blank" rel="noreferrer">lemming@henning-thielemann.de</a>> wrote:<br>
><br>
><br>
> On Wed, 12 May 2021, Sandy Maguire wrote:<br>
><br>
> > Found myself puzzled the other day when I wanted an (Enum a, Enum b) =><br>
> > Enum (a, b) instance, and was distraught that it didn't exist.<br>
> ><br>
> > The following is a reasonable implementation:<br>
><br>
> This is certainly an instance that fulfills some laws, but do we really<br>
> want it or is it more likely an accident if someone writes, say, succ<br>
> (a,b)?<br>
><br>
> We already allow "max (a,b) (c,d)", which can be pretty counterintuitive.<br>
> I think the Ord instance for pairs is currently mostly used for Set and<br>
> Map, but a separate class for this purpose would have been better.<br>
> _______________________________________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>