My first real experience with using a monad in a way that simplified the crap out of what it was that I was doing.
Walking around a directory structure is a serious pain in the ass, unless you've got a way to navigate the history of that traversal with ease.
A functional Stream is a lazily computed data structure that can be hard to wrap your head around. I take a stab at explaining it while computing the Fibonacci series.
After playing with Scala for a while, I got interested in how to manipulate C++11 into providing me the ability to map over a container type, transforming it as I go.