Gregory Woodhouse gregory.woodhouse at sbcglobal.net
Mon Oct 31 14:05:26 EST 2005

```On Oct 31, 2005, at 3:02 AM, Cale Gibbard wrote:

> Perhaps you're referring to a monoid. Since you seem to have some
> familiarity with category theory, check out
> http://en.wikipedia.org/wiki/Monad_%28category_theory%29 for a formal
> definition of monads and some background. Translating between
> notation, μ = join and η = return in Haskell. The application of the
> functor T to functions is called fmap, or liftM, which should always
> be equivalent.
>
> The functor behind a monad is always an endofunctor, that is, from the
> category to itself. In this case, you'll be interested in the category
> of Haskell types and Haskell-definable functions between them.

This was actually quite helpful. If someone had told me that a monad
was a functor in the first place, this would all have been much less
mysterious. (BTW, I have indeed encountered adjoint functors, Hom and
Tensor, in the context of algebraic topology, so the article did
leave me with a bit more of a sense of having my feet on the ground.)

>
> For a much gentler description and one way in which monads relate to
> programming, check out
> that I wrote.
>

This is an excellent article! I found it extremely useful and lucid.
To be sure, it's going to take a bit more time to let all these ideas
sink in, but I liked the approach of focusing on fmap and join (>>=
always seemed mysterious). Believe it or not, though I've read that
lists are monads, this is perhaps the first time I've seen it spelled
out just how.

===
Gregory Woodhouse
gregory.woodhouse at sbcglobal.net

"It is foolish to answer a question that
you do not understand."
--G. Polya ("How to Solve It")

```