[Haskell-beginners] Expressing the idea of a group in Haskell

Brent Yorgey byorgey at seas.upenn.edu
Wed Mar 16 15:58:13 CET 2011


On Wed, Mar 16, 2011 at 08:49:27AM +0000, Christian wrote:
> Hello Haskell-Experts!
> I was trying to express the notion of a (mathematical) group
> in Haskell, using type classes, as an exercise.
> If I am not mistaken, a group can be for example the Reals together with
> the multiplication operation and "1" as the neutral element.
> Or, the Reals with addition and "0".
> my first idea was to write something like
> 
>  class Group a where
>    ...
> 
> _but_, I thought, I need to parameterise, so to speak, not only using the
> type "a", but also the group operation. 
> How could I do that in Haskell? Is that even possible?

Yes, this is a problem, and it's not really possible directly.  In
this sort of situation what you often do is make two *newtypes* which
are just wrappers around the type in question, and then make a different
Group instance for each.  As an example, you can look at Data.Monoid,
which defines two newtype wrappers called Sum and Product, with
additive and multiplicative Monoid instances respectively.

(As an aside, the real numbers do *not* actually form a group under
multiplication, since 0 has no inverse.  However, the reals without 0
do.)

-Brent



More information about the Beginners mailing list