So I'm learning Haskell, a purely functional programming language, by reading Yet Another Haskell Tutorial. It's pretty interesting, and appears to have a much nicer feel than Standard ML did.
I'm particularly interested in the way Haskell uses monads to represent non-functional aspects (I/O and other state changes) without introducing side effects to the language itself or compromising its purely functional nature.
Functional programming quite different from object-oriented programming, which is all about state manipulation (after all, OOP is "programming by sending messages to objects"). On the other hand, pure functional programming and pure object-oriented programming have a lot of the same "values" underneath them: Leverage the type system to do most of the work in modeling your problem domain, and when you write code, write it in very small, concise, discrete units that each express one concept clearly. In either situations, long do-everything methods are a major code smell.
I was spurred to actually sit down and learn Haskell after reading through most of Google's MapReduce Programming Model — Revisited by Ralf Lämmel (blog).
- Haskell and functional programming.