classMonoid m where
mempty :: m
mappend :: m -> m -> m
mconcat :: [m] -> m
mconcat = foldr mappend mempty
Restriction
mempty `mappend` x = x
x `mappend` mempty = x
(x `mappend` y) `mappend` z = x `mappend` (y `mappend` z)
Instances
instanceMonoid [a] where
mempty = []
mappend = (++)
instanceMonoidOrderingwhere
mempty = EQLT `mappend` _ = LTEQ `mappend` y = y
GT `mappend` _ = GTinstanceMonoid a => Monoid(Maybea)where
mempty = NothingNothing `mappend` m = m
m `mappend` Nothing = m
Just m1 `mappend` Just m2 = Just (m1 `mappend` m2)