Monads, part one

Lots of other bloggers have attempted this, but what the heck, I'll give it a shot too. In this series I'm going to attempt to answer the question:

I'm a C# programmer with no "functional programming" background whatsoever. What is this "monad" thing I keep hearing about, and what use is it to me?

Bloggers often attempt to tackle this problem by jumping straight into the functional programming usage of the term, and start talking about "bind" and "unit" operations, and higher-order functional programming with higher-order types. Even worse is to go all the way back to the category theory underpinning monads and start talking about "monoids in the category endofunctors" and the like. I want to start from a much more pragmatic, object-oriented, C#-type-system focussed place and move towards the rarefied heights of functional programming as we go. Continue reading