> To find out how Haskell implementations treat negated 
> literals, I tested 
> the following program:
> 
> ------------------------------------------------
> main = print (minusTwo,trueOrFalse)
> 
> minusTwo = -2::N
> 
> trueOrFalse =
>     case minusTwo of
>       -2 -> True
>       _ -> False
> 
> data N = Negate N | FromInteger Integer deriving (Eq,Show)
> 
> instance Num N where
>   negate = Negate
>   fromInteger = FromInteger
> -------------------------------------------------
> 
> The result is:
> 
>     * ghc 5.02.2: main outputs: (FromInteger (-2),True)

GHC has two bugs in this area, one of which has been fixed recently.
The current output is (Negate (FromInteger 2),False) (i.e. the same as
hbc).  We were being a little too eager to replace 'negate (fromInteger
N)' by 'fromInteger (-N)'.  There is also a bug in the pattern handling,
however.

Thanks for a nice test case...

Cheers,
        Simon

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to