[Haskell-cafe] Inheritance and Wrappers

MattMan guitarmatt007 at hotmail.com
Mon Jan 31 20:58:02 CET 2011

tldr: Can I make arbitrary instances of one class instantiate another without
using wrappers?

I'm new to Haskell, and am trying to implement some simple typeclasses for
doing algebra.  For example I have type class (simplified for the sake of

class AbGroup a where
    add :: a -> a -> a

I would like any type instantiating Num to also be an abelian group:

instance (Num a) => AbGroup a where
 add i j = i+j,

but this doesn't compile because a is a variable, not a type constructor(or
something).  The problem is fixed, in a sense, If I introduce a wrapper

data Wrapper a = Wrap a
instance (Num a) => AbGroup (Wrapper a) where
     add (Wrap i) (Wrap j) = Wrap(i+j)

However, this is clumsy.  Is there something else I can do?  Thanks!

View this message in context: http://haskell.1045720.n5.nabble.com/Inheritance-and-Wrappers-tp3365126p3365126.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

More information about the Haskell-Cafe mailing list