The most difficult part of starting to program with Haskell is giving up many of the
most familiar techniques and ways of thinking within imperative programming. A first
impression is often that it must simply be impossible to write a computer program if you
cannot do X, Y, or Z, especially since X, Y, and Z are some of the most common