On Jan 16, 2008 11:30 PM, Derek Elkins <[EMAIL PROTECTED]> wrote:
> For the love of Pete, floating point numbers are not real numbers. 0/0
> is mathematically defined for floating point numbers to be NaN. If you
> don't want to use IEEE floating point numbers, use a different type as
> was suggested early in this thread.
In fact, you can be happy just by using Rational
Prelude> 0/0 :: Rational
*** Exception: Ratio.%: zero denominator
or creating a newtype
newtype ZeroUndef a = Z {unZ :: a}
instance Eq a => Eq (ZeroUndef a) where
Z a == Z b = a == b
Z a /= Z b = a /= b
instance Show a => Show (ZeroUndef a) where
...
instance Num a => Num (ZeroUndef a) where
...
instance Fractional a => Fractional (ZeroUndef a) where
...
Z a / Z 0 = error "..."
Z a / Z b = Z (a / b)
....
so that ZeroUndef Double, ZeroUndef Float, ZeroUndef Matrix and all
friends do work like you want.
--
Felipe.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe