<div dir="ltr">I'm implementing Enum for a type I have, and I figured it should replicate what ordinary Enum types, so I did some tests on how Enum behaves.<br><br>I noticed that:<div><br></div><div>"enumFromThenTo 3 3 5" is not the same as "enumFromThenTo 3 3 1". </div><div><br></div><div>This seems bizarre to me. Generally increasing the stepsize increases the length of the list.</div><div><br></div><div>For example, </div><div><br></div><div>"length (enumFromThenTo 0 10 1000) == 101"</div><div>"length (enumFromThenTo 0 2 1000) == 501"<br></div><div>"length (enumFromThenTo 0 1 1000) == 1001"<br></div><div><div>"length (enumFromThenTo 0 0 1000) == infinite"<br></div></div><div><br></div><div>but</div><div><br></div><div><div>"length (enumFromThenTo 0 (-10) (-1000)) == 101"</div><div>"length (enumFromThenTo 0 (-2) (-1000)) == 501"<br></div><div>"length (enumFromThenTo 0 (-1) (-1000)) == 1001"<br></div><div>"length (enumFromThenTo 0 0 1000) == 0"<br></div></div><div><br></div><div>It would seem to me that "enumFromThenTo x y z == map negate (enumFromThenTo (-x) (-y) (-z))" should be an invariant that should hold but in this case it clearly doesn't. </div><div><br></div><div>Is this intentional, and if so, for what reason? Or is this a GHC bug?</div></div>