Sure, you can define your own type class like that:

import Prelude hiding ((+), (-)) -- usual (+) and (-) shouldn't be here...
import qualified Prelude as P -- but they still are accessible with a prefix
class Group a where
   (+) :: a -> a -> a
   (-) :: a -> a -> a
instance Group Integer where
   (+) = (P.+)
   (-) = (P.-)
instance Group A where
   (+) a b = A (elem1 a + elem1 b) (elem2 a + elem2 b) -- works for elem1 and 
elem2 being of class Group - say, Integer's
   (-) a b = ...

22.11.2010 9:48, Magicloud Magiclouds пишет:
Hi,
   For example, I have a data A defined. Then I want to add (+) and (-)
operators to it, as a sugar (compared to addA/minusA). But * or other
stuff defined in class Num is meanless to A. So I just do:
(+) :: A ->  A ->  A
(+) a b =
   A (elem1 a + elem1 b) (elem2 a + elem2 b) -- I got errors here, for
the (+) is ambiguous.

   So, just wondering, does this way work in Haskell?
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to