# Implementing instance of '^' operator

3 messages
Open this post in threaded view
|

## Implementing instance of '^' operator

 As a ‘hello world’ example for type definitions, I like to define a numeric type that can handle the mod p multiplicative group, where p is prime. This requires:·       Implementing interface functions·       Defining non-trivial implementations, where constructor must be private, etc.·       Invoking an abstract superclass concrete instance method from within the subclass method definitionThe latter appears not to be possible in Haskell. Is this true?Here’s the basic code, but I punted on x^n. It looks like I’d have to paste in the entire original definition of ‘^’.data Modp a = Modp a a deriving (Eq, Show) mkModp p n | isPrime p = Modp p (n `mod` p)           | otherwise = error \$ show p ++ " is not a prime" instance Integral a => Num (Modp a) where         (Modp q n) + (Modp p m) | p==q = Modp p \$ (n+m) `mod` p                                 | otherwise = error \$ "unequal moduli"         (Modp p n) * (Modp q m) | p==q = Modp p \$ (n*m) `mod` p                                 | otherwise = error \$ "unequal moduli"         negate (Modp p n) = Modp p (p-n)         -- can't reuse base because ^ is impl. directly in prelude{-       (Modp p x) ^ n | n <= p  = (Modp p x) `baseExp` n                        | n1 == 0 = (Modp p x)                        | n > p   =  x ^ n1             where baseExp = ^ in Num                   n1      = n `mod` p-}instance Integral a => Fractional (Modp a) where         recip (Modp p n) = (Modp p n)^(p-2)  isPrime p = True -- stub_______________________________________________ Beginners mailing list [hidden email] http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners