
Ratio Integer may possibly have the same trouble, or maybe something related. I was messing around with various operators on Rationals and found that positive and negative infinity don't compare right. Here's a small program which shows this; if I'm doing something wrong, I'd most appreciate it being pointed out to me. If I fire up ghci, import Data.Ratio and GHC.Real, and then ask about the type of "infinity", it tells me Rational, which as far as I can tell is Ratio Integer...? So far I have only found these wrong results when I compare the two infinities. Uwe
module Main where import Prelude import Data.Ratio import GHC.Real
pinf = infinity ninf = -infinity zero = 0
main = do putStrLn ("pinf = " ++ (show pinf)) putStrLn ("ninf = " ++ (show ninf)) putStrLn ("zero = " ++ (show zero)) putStrLn ("min pinf zero =\t" ++ (show (min pinf zero))) putStrLn ("min ninf zero =\t" ++ (show (min ninf zero))) putStrLn ("min ninf pinf =\t" ++ (show (min ninf pinf))) putStrLn ("min pinf ninf =\t" ++ (show (min pinf ninf)) ++ "\twrong") putStrLn ("max pinf zero =\t" ++ (show (max pinf zero))) putStrLn ("max ninf zero =\t" ++ (show (max ninf zero))) putStrLn ("max ninf pinf =\t" ++ (show (max ninf pinf))) putStrLn ("max pinf ninf =\t" ++ (show (max pinf ninf)) ++ "\twrong") putStrLn ("(<) pinf zero =\t" ++ (show ((<) pinf zero))) putStrLn ("(<) ninf zero =\t" ++ (show ((<) ninf zero))) putStrLn ("(<) ninf pinf =\t" ++ (show ((<) ninf pinf)) ++ "\twrong") putStrLn ("(<) pinf ninf =\t" ++ (show ((<) pinf ninf))) putStrLn ("(>) pinf zero =\t" ++ (show ((>) pinf zero))) putStrLn ("(>) ninf zero =\t" ++ (show ((>) ninf zero))) putStrLn ("(>) ninf pinf =\t" ++ (show ((>) ninf pinf))) putStrLn ("(>) pinf ninf =\t" ++ (show ((>) pinf ninf)) ++ "\twrong") putStrLn ("(<=) pinf zero =\t" ++ (show ((<=) pinf zero))) putStrLn ("(<=) ninf zero =\t" ++ (show ((<=) ninf zero))) putStrLn ("(<=) ninf pinf =\t" ++ (show ((<=) ninf pinf))) putStrLn ("(<=) pinf ninf =\t" ++ (show ((<=) pinf ninf)) ++ "\twrong") putStrLn ("(>=) pinf zero =\t" ++ (show ((>=) pinf zero))) putStrLn ("(>=) ninf zero =\t" ++ (show ((>=) ninf zero))) putStrLn ("(>=) ninf pinf =\t" ++ (show ((>=) ninf pinf))) putStrLn ("(>=) pinf ninf =\t" ++ (show ((>=) pinf ninf)) ++ "\twrong")