Gaussian integers. Reply
S.D.Mechveliani
mechvel@math.botik.ru
Tue, 19 Mar 2002 15:05:03 +0300
dominic.j.steinitz@britishairways.com writes
> On holiday, I started reading about Gaussian integers (as you do) and I
> thought this should be a piece of cake for Haskell. I get the following
> error in Hugs:
> [..]
>
> data Integral a => Gaussian a = Gaussian a a
> deriving (Eq, Show)
>
> instance Num (Gaussian a) where
> Gaussian a b - Gaussian a' b' = Gaussian (a-a') (b-b')
> Gaussian a b + Gaussian a' b' = Gaussian (a+a') (b+b')
> Gaussian a b * Gaussian a' b' = Gaussian (a*a' - b*b') (a*b' + b*a')
> negate (Gaussian a b) = Gaussian (negate a) (negate b)
> fromInteger a = Gaussian (fromIntegral a) 0
To my mind, it is not good to set `Integral a =>' to data declaration.
It is better to set such things in the instance declarations.
Try, say
data Gaussian a = Gau a a deriving (Eq, Show)
instance Integral a => Num (Gaussian a)
where
Gau a b - Gau a' b' = Gau (a-a') (b-b')
...
-------------------------------------------------
scico:~/t> ghci M.hs
... GHC Interactive, version 5.02.2, for Haskell 98.
...
M> Gau 1 1 * Gau 1 (-1)
Gau 2 0
-----------------
Serge Mechveliani
mechvel@botik.ru