I've been doing functional programming, primarily in OCaml, for a couple years now, and have recently ventured into the land of monads.  I'm able to work them now, and understand how to use them, but I'm interested in understanding more about their mathematical foundations.  These foundations are usually presented as coming from category theory.  So we get explanations such as the following:


  A monad is a monoid in the category of endofunctors.


Now, my goal (partially) is to understand what that means.  Can anyone suggest a gentle introduction to category theory, particularly one aimed at programmers already familiar with a functional language such as ML or Haskell, with references for further reading?  Resources not necessarily aimed at programmers but accessible to readers with a background in discrete math and first-order logic would be quite acceptable as well.

Online resources:

The Catsters channel
MATH198 course notes - examples in Haskell
Rydehard, Burstall: Computional Category Theory - examples in ML (free reprint of a book)
MAGIC course
Barr, Wells: Category theory for computing science (TAC TR22 is a free reprint of the book)
Jaap van Oosten: basic category theory
Tom Leinster
Eugenia Cheng
Steve Awodey - very similar to the book mentioned by Quadrescence
Daniele Turi
Thomas Streicher
Abstract and concrete categories: the joy of cats - might be considered too verbose, but it's full of examples; slightly newer (?) version as TAC TR17
Spivak: Category Theory for Scientists - free textbook of a 2013 MIT OpenCourseWare; an updated (and non-free) version was published by MIT Press in 2014.
Emily Riehl: Category Theory in Context

Books (not free):

Benjamin Pierce: Basic category theory for computer scientists, MIT Press 1991; a slight expansion/update of the earlier (and free) CMU-CS-88-203 report
MacLane - solid mathematical foundations, but hardly any references to computing
Martin Brandenburg - Einführung in die Kategorientheorie (in german)

Category theory in Haskell:

Wikibooks introductory text
sigfpe's blog has a lot of category theory articles - (di)natural transformations, monads, Yoneda lemma...
Comonad.Reader
The Monad.Reader - check "Calculating monads with category theory"
Bartosz Milewski - Category Theory for Programmers

Another list
