I'm a developer and have become fixated on functional programming due to its expressivity. I have begun learning Haskell but have reached a very significant wall when trying to comprehend functors, monads, monoids and applicative functors. Currying, lambdas, and function composition all make sense to me, but the concept of a Monad is not that intuitive. I have taken a semester's worth of Discrete mathematics: this book, which covers some set theory (which from some reading I guess a set is a category, and a morphism is a mapping function). I have also read Learn you a Haskell.
My question is simply, from a programmer's / pseudo-mathematician perspective, what is the best introductory text to category theory (or to the topics I mentioned above) that will allow me to understand these concepts and expound upon my understanding if need be later on?