[Haskell-beginners] Type of a Group.
Robert Goss
goss.robert at gmail.com
Sat Feb 9 14:05:12 CET 2013
Dear all,
Looking to learn a little haskell I tried to program up a little group
theory but feel I am stuck on what the types should be. At first it
seemed obvious (and the algebra package does this) that the type of a
group should be given by:
class Group g where
mul :: g -> g -> g
inv :: g -> g
unit :: g
My problem is this seems to assume that the type of group you are in is
encoded by the type system.
I first ran into problems with this when I wanted to define a cyclic
group. The only way I could define the type was either to define each
cyclic group separately so have C2, C3, C4, ... or parametrise it over
the class Nat. So a cyclic group would have the type Cyclic (Succ(Succ(
... Succ(Zero)) ... )) which would consistently define all cyclic groups
but is hardly any better. For example a computation mod a large prime p
is not going to be pleasant.
I came up with a partial solution by realising that a group is defined
as a set X and some operations on it to get
class Group g x where
mul :: g -> x -> x -> x
inv :: g-> x -> x
unit :: g -> x
Making it easy to define cyclic groups and all my old groups carry over.
But now to evaluate an expression I need to hang onto the group i am in
and pass it around. As i am newish to haskell I wanted to know if I have
missed a simpler more obvious way of doing things?
All the best,
Robert Goss
More information about the Beginners
mailing list