
Hi, While they have similarities, they are not the same. Semigroup (S,*) is a set S with associative binary operation *. Monoid is a semigroup that has identity element i such that i * a = a and a * i = a. And group is a monoid in which every element of set has it’s own inverse: a * b = i and b * a = i where b is an inverse of a. Let’s look at the definition of Monoid in haskell. class Monoid a where mempty :: a -- ^ Identity of 'mappend' mappend :: a -> a -> a -- ^ An associative operation mconcat :: [a] -> a -- ^ Fold a list using the monoid. -- For most types, the default definition for 'mconcat' will be -- used, but the function is included in the class definition so -- that an optimized version can be provided for specific types. mconcat = foldr mappend mempty So we have a set of a, associative binary operation mappend and identity element mempty. The only difference between Monoid a in haskell and monoid in algebra is that Monoid in haskell has mconcat function in it’s definition. But you can ignore it. I hope it helps. Cheers, d12frosted On March 25, 2015 at 16:03:14, Shishir Srivastava (shishir.srivastava@gmail.com) wrote: Hi, Reading about Monoids it seems they derive a lot on the algebraic structures of 'Groups' ? Is it then correct to assume that Monoids can be used to represent 'Groups' ? If not are there any standard haskell libraries which represent algebraic structures such as 'Groups' , 'Fields' etc. Thanks, Shishir Srivastava _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners