The majority of software engineering literature portrays
object-oriented programming as distinct from, and often
irreconcilable with, functional programming. This is, of course, a
false dichotomy, as the techniques encouraged by functional
programming are applicable in even the most object-oriented
languages. Yet object-orientation, being perhaps history’s most
popular software paradigm, has popularized its tenets, and
occasionally we can see them show up even in programming languages
like Haskell, a language about as antithetical to the
object-oriented philosophy as possible.