Hey, I've found terrific slides about monoids!
http://comonad.com/reader/wp-content/uploads/2009/08/IntroductionToMonoids.pdf
Edward Kmett, you rock!
There's more http://comonad.com/reader/2009/iteratees-parsec-and-monoid/
- but the second part was too hard for me to read it fully without
special motivation.
2009/11/15 Daniel Schüssler <anotheraddress at gmx.de>:
> On Sunday 15 November 2009 13:05:08 Nicolas Pouillard wrote:
>> Excerpts from Daniel Schüssler's message of Sun Nov 15 07:51:35 +0100 2009:
>> > Hi,
>>>> 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,
>>>> You are right :) If `normalize' is meant to normalize arbitrary lists, we'd
> have to use your version. If OTOH we just want to normalize xs ++ ys, we
> shouldn't iterate over the whole list; it'd be better to use Data.Sequence and
> just consider the middle, as you said (I was thinking of free groups, where
> there can be more collapse, but in that case we'd need the analogue your
> version too).
>>> Greetings,
> Daniel
> _______________________________________________
> Haskell-Cafe mailing list
>Haskell-Cafe at haskell.org>http://www.haskell.org/mailman/listinfo/haskell-cafe>
--
Eugene Kirpichov
Web IR developer, market.yandex.ru