
Hello, If we look at these two examples, it appears that the results are reversed: Prelude> let n o = (-1 `o` 1) in n (-) 0 Prelude> let n o = (-1 `o` 1) in n (+) -2 Prelude> we expect (-1 - 1) = -2 and (-1 + 1) = 0, but we get the opposite. Due to operator precedence, the equations are being interpreted as: Prelude> let n o = (-(1 `o` 1)) in n (-) 0 Prelude> let n o = (-(1 `o` 1)) in n (+) -2 The fix is to use parens around a negative term: Prelude> let n o = ((-1) `o` 1) in n (-) -2 Prelude> let n o = ((-1) `o` 1) in n (+) 0 Prelude> I have heard complaints about the negation sign in Haskell before, I suppose this is why. Hopefully someone else can provide more details. j. ps. You could probably also fix it by changing the precedence of the `o` operator. I believe that is possible. But parens around (-b) is the more standard solution. At Mon, 15 Sep 2008 02:24:14 +0200, Cetin Sert wrote:
Hi why do I get?
cetin@linux-d312:~/lab/exp/1> ./eq 23 23 3 a = b = c = n1-0.8457820374040622n2-0.1542179625959377
when I run
import System.IO
main :: IO () main = do a ← ask "a" b ← ask "b" c ← ask "c" eval a b c
ask v = do putStr (v ++ " = ") readLn
eval a b c = do case delta < 0 of True → putStr "neg" False → putStr ("n1" ++ show n1 ++ "n2" ++ show n2) where delta = b*b - 4*c*a n o = (-b `o` sqrt(delta))/(2*a) n1 = n (+) n2 = n (-)