The idea that you can replace nearly every loop with functional constructs really clicked for me when I saw that you can use zip in Haskell and each_cons in Ruby to see each element and its successor at the same time.
[10,11,2,3,4,5].each_cons(2).map {|curr,succ| succ - curr } => [1,-9,1,1,1]