The issue is that Haskell is inherently a language in which you're not programming anything that maps particularly well to the machine you're actually running it on. As a result, Haskell developers never actually talk in terms of what a program does on the machine, they talk in terms of what it does in their abstract model of computation.
This is sort of what I'm getting at, though. Haskell gives you the language to talk fluently about everything I was writing. If you use it enough it becomes second nature and these kinds of higher order concepts are easy. Monads are easy.
In languages which lack the tools to make it easy to talk about this stuff it's hard to say these things without sounding like a loon.
The only reason I sound academic is that the simple language I'm used to using has been denied.