A Gentle Introduction to Category Theory [pdf]
citeseerx.ist.psu.edu
citeseerx.ist.psu.edu
For example, one of my friends is working on showing equivalences between I/O in Haskell (purely functional) and Lucid (demand-driven dataflow). Category theory shows a neat relationship between the models and a way to move between them.
Other areas of CS where category theory is applied:
1. Algebraic data types and modules. E.g., http://reperiendi.wordpress.com/2007/11/03/category-theory-f...
2. Semantics of non-terminating programs. E.g., http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.15.2...
3. Semantics of concurrency. E.g., http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.62.8...
These are probably the most important places, besides FP, where categories are used in computer science, but there are others: logic programming, computer graphics and vision, knowledge representation, ontology, &c. The applications to FP are most visible because (i) Haskell monads are a little slice of category theory, so users as well as language designers need to get their hands dirty[+], and (ii) it's very natural to want a realisation of a categorical semantics to have first-class functions, ideally lazy functions, because that makes the realisation easier.
[+] Categorical abstractions in semantics are dirty, don't let people fool you into believing they are pure and clean.
Learning category theory before learning more substantial facts is in my opinion going totally in backward order. Or maybe I'm just an (metaphorically) old grump and refuse to acknowledge the revolution just like mathematicians in the beginning of twentieth century were refusing to accept set theory.
I've tried a few times to learn category theory in the abstract, and struggled to motivate myself when I couldn't clearly "see" the structure and the application, in categories (like Hask or Vect) which I know reasonably well.
I'm glad it exists though, so I know where to look if I want some kind of deeper unifying intuition about structural ideas in whatever area of maths I'm studying, which might help me connect them to other areas, and as I read more graduate-level maths I imagine more of these opportunities will crop up.
Perhaps it's one of those things where it's helpful to learn the basic definitions early on, and their implications in categories (initially probably fairly straightforward ones) which you already know.
But then, just keep it gently percolating while you study other things, rather than trying to force it and make sense of adjoint functors etc before you've studied enough applications to justify the abstraction.
I recommend the "Going Deep" show episodes of Erik Meijer and Brian Beckman, http://channel9.msdn.com/search?term=erik+meijer+brian+beckm...
plus the book "Algebra of Programming" by Richard Bird, Oege de Moor http://www.amazon.com/Algebra-Programming-Prentice-Hall-Inte...
Math isn't ever "useful". Math only generates more math. Math is measured in ideas inspired.
By "useful" I mean "useful in getting new results or new, better proofs". By this metric, singular homology is certainly useful, because it enables us to create clean and elegant proofs of some highly non-trivial and interesting facts, but I cannot imagine anything more useless in real life.
However useful or not category theory is for producing new proofs, I found it enlightening and am glad this was posted.
"This guide explored the theoretical backgrounds of Haskell’s IO monad. On the way we have seen functors, natural transformations, and finally monads. All these purely theoretic concepts appeared to have a quite practical correspondence in the Haskell programming language, as emphasized by the according examples. It should be clear now, how the IO monad is used to pass around the state of the world, without allowing the programmer to access it “too much”.