Breaking down the problem
One thing you will have noticed is that function definitions in Haskell tend to be
extremely short compared to those in other languages. This is partly due to the concise
syntax of Haskell, but a greater reason is because of the emphasis in functional
programming of breaking down problems into their component parts (rather than just
sort of "doing what needs to be done" at each point in an imperative program). This
encourages reusability of parts, and allows much better verification that each part really
does what it is supposed to do.