Re: Why does "enumFromThenTo x x y" depend on "y"?
This behaviour follows directly from the language report :
The sequence enumFromThenTo e1 e2 e3 is the list [e1,e1+ i,e1+ 2i,…e3], where the increment, i, is e2− e1. If the increment is positive or zero, the list terminates when the next element would be greater than e3; the list is empty if e1 > e3. If the increment is negative, the list terminates when the next element would be less than e3; the list is empty if e1 < e3.
In both "enumFromThenTo 3 3 5" and "enumFromThenTo 3 3 1" the increment is 0. So the list must terminate when the next element would be greater than 5 or 1 respectively.
In this first case 3 > 5 == False, so you get an unbounded list.
In the second case 3 > 1 == True, so you get an empty list.
The above is only specified for the types Int and Integer.
It would be nice to have some laws that govern the behaviour of all Enum instances (not just Int and Integer). Not just in relation with the Bounded class.