Sunday, July 15, 2007

Haskell Mindset

There are several things an imperative programmer needs to address before fully getting to grips with Haskell:
  • It is lazy. X is not evaluated 'when the program' reaches 'X = blah'. In fact it might never be.
  • Changing state is not paramount. Forget the pigeon holes.
  • Function arguments are not always necessary.
  • Types can be inferred.
A good article to read about these is "Why Haskell Matters"

All of the above are possible in an imperative language (or just about) but Haskell brings these to the fore and provides a syntax and semantics that is built around them. This encourages other ways of thinking that are different from those encouraged by the OO paradigm.

One key concept in Haskell is that of Monads. Some people really struggle with these and there a numerous tutorials on it. Some of these tutorials are good and some are bad. The one that worked for me was the one by Jeff Newburn. It helps if you have the above concepts in mind before embarking on the journey.

Monads are also about sequencing of computations. In imperative languages, there is typically only one way that operations are sequenced. This can be encoded in Haskell using a programmer defined Monad stack. See the description of HJS for an example of a simple stack for JavaScript that provides support for IO, state and exceptions.

No comments:

About Me

Melbourne, Australia
I work for GE in Melbourne Australia. All views do not necessarily represent GE.