[Haskell-cafe] Another monad question...
stefanor at cox.net
Sun Jul 15 00:23:12 EDT 2007
On Sun, Jul 15, 2007 at 12:03:06AM -0400, David LaPalomento wrote:
> On 7/14/07, Stefan O'Rear <stefanor at cox.net> wrote:
>> Your base case is subtly wrong - it should be return , not mzero.
>> Mzero always fails - mzero `mplus` x = x, by one of the MonadPlus laws.
> Ah! So here's another quick question: if mzero is the identity element, why
> isn't it part of the Monad class? Correct me if I'm wrong but aren't Monads
> (in the mathematical sense) required an identity element by definition?
You're probably confusing Monads with Monoids.
* Concept from abstract algebra
* A set Ty, a distinguished element mempty :: Ty, and a binary operator
mappend :: Ty -> Ty -> Ty
* mempty `mappend` x = x
* x `mappend` mempty = x
* a `mappend` (b `mappend` c) = (a `mappend` b) `mappend` c
* Concept from category theory
* A category C (assumed to be Haskell objects in the type class)
* A functor F :: C -> C
* Two natural transformations η :: F^0 -> F^1, μ :: F^2 -> F^1
* the monad laws
* Monads that are also monoids
* mappend, mempty named mplus, mzero to avoid conflicts
* (OK it was the other way around, monadplus came first)
I've heard that Monads are in some way like Monoids, hence the name.
But I don't understand the explanation yet myself :(
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20070714/8ed54b41/attachment.bin
More information about the Haskell-Cafe