Thinking in terms of railways just made every monad tutorial I've tried to puzzle my way through instantly click in my mind. I/O monads? They're just sugar to help you maintain a parallel railway track of accumulated I/O side effects, while still thinking in terms of your primary track and what it emits!
If you're confused at all about monads, you're a visual learner, and you're tired of Yet Another Monad Tutorial, the slide deck in this link should be absolutely mandatory viewing. It's one of those things that is just the perfect mix of conciseness and humor, and I'm probably going to look back on this as "How I Learned To Stop Worrying And Love Functional Programming."
If you're confused at all about monads, you're a visual learner, and you're tired of Yet Another Monad Tutorial, the slide deck in this link should be absolutely mandatory viewing. It's one of those things that is just the perfect mix of conciseness and humor, and I'm probably going to look back on this as "How I Learned To Stop Worrying And Love Functional Programming."