[Haskell-cafe] Function Precedence
Hans Aberg
haberg at math.su.se
Tue Apr 8 15:23:33 EDT 2008
On 2 Apr 2008, at 16:20, Loup Vaillant wrote:
>> class AdditiveSemiMonoid a where
>> (+) :: a -> a -> a
>
> Err, why *semi* monoid? Plain "monoid" would not be accurate?
I found an example where it is crucial that the monoid has a unit:
When given a monoid m, then one can also define an m-algebra, by
giving a structure map (works in 'hugs -98'):
class Monad m => MAlgebra m a where
smap :: m a -> a
Now, the set of lists on a set A is just the free monoid with base A;
the list monad identifies the free monoids, i.e., the lists. So this
then gives Haskell interpretation
class Monoid a where
unit :: a
(***) :: a -> a -> a
instance Monoid a => MAlgebra [] a where
smap [] = unit
smap (x:xs) = x *** smap xs
Here, I use (***) to not clash with the Prelude (*).
But the function "product" here shows up as the structure map of a
multiplicative monoid. Similarly, "sum" is the structure map of the
additive monoids. And (++) is just the monoid multiplication of the
free monoids.
Hans
More information about the Haskell-Cafe
mailing list