[Haskell-cafe] Could someone teach me why we use Data.Monoid?

Nicolas Pouillard nicolas.pouillard at gmail.com
Sun Nov 15 07:05:08 EST 2009


Excerpts from Daniel Schüssler's message of Sun Nov 15 07:51:35 +0100 2009:
> Hi,
Hi,

> -- Invariant 1: There are never two adjacent Lefts or two adjacent Rights
[...]
> normalize (Left a0 : Left a1 : as) = Left (mappend a0 a1) : normalize as
> normalize (Right a0 : Right a1 : as) = Right (mappend a0 a1) : normalize as

If you want to preserve your invariant, I think you should do :

normalize (Left  a0 : Left  a1 : as) = normalize (Left  (mappend a0 a1) : as)
normalize (Right a0 : Right a1 : as) = normalize (Right (mappend a0 a1) : as)

However, maybe it is correct if you only call normalize on (xs ++ ys) where
xs and ys are already normalized so that you have only one point where you can
break this invariant.

Regards,

-- 
Nicolas Pouillard
http://nicolaspouillard.fr


More information about the Haskell-Cafe mailing list