Haskell's laziness is tricky to understand coming from imperative
languages, but once you figure out its evaluation rules, you'll begin to
see the elegance.
Is there a paper or other single resource that will help me thoroughly understand non-strictness in Haskell? Once my programs hit a certain level of complexity, their behaviour becomes much harder for me to predict. I've been using the wiki pages up to this point, but apparently they haven't pushed my understanding of laziness nearly far enough.