
2009/11/14 Daniel Schüssler
- Product (a,b) and co-product (Either) of monoids the coproduct of monoids is actually a bit tricky.
Funny, I was just thinking about that. I was pondering the article at LTU on Lawvere theories: http://lambda-the-ultimate.org/node/3235 Essentially the idea is this: monads correspond to algebraic theories and monad transformers are ways to combine algebraic theories. But Lawvere theories provide another way to describe algebraic theories, and hence the things that monads can help with: like side effects, state and non-determinism. The advantage of Lawvere theories is there is some nice mathematics for how to combine them, something that's lacking from monads. So I just worked through a simple example: combining the Writer monad with itself. As Lawvere theories there are two ways to combine them: the product and the sum. The product corresponds, I think, to the usual monad transformer. This gives the Writer monad corresponding to the product of monoids. But the sum gives the Writer monad for the coproduct of monoids. (I think this is correct, but I'm not 100% sure I totally get Lawvere theories yet.) If you think about it, it's a very natural thing to do. If you think of the Writer monad as being useful to make logs then the coproduct allows you to interleave two different kinds of logs keeping the relative order of the entries. The usual monad transformer keeps two separate logs and so loses the relative ordering information. So it's actually something you might frequently want in real world code. But I can't imagine a monad transformer for Writer that would give the coproduct when combined with another Writer, so I don't think it could be implemented as such. -- Dan