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") _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe