Thinking in Functional programming
jganetsk: Learn how to implement integers, booleans, pairs, tuples, lists, and trees in lambda calculus (and, more specifically, System F)... and you will be able to think functionally.