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

Reply via email to