Most of the programming languages I have learned and used so far have been from the *imperative* programming paradigm, which means that they describe the problem to be solved in terms what needs to be done, step by step, in order to solve it. (*Object oriented* programming, while often considered a separate paradigm, is essentially just a highly modular type of imperative programming.)

The alternative to the imperative paradigm is *declerative* programming, which describes the problem in terms of what it should accomplish, rather than how it should get there. The declerative paradigm includes logic programming languages (such as Prolog), and *functional* programming languages (such as Lisp or Haskell).

Functional languages are the one major paradigm which I haven't had any exposure to. Until now. I've decided that, in order to be a well-rounded coder, and also because it might be fun, I should learn a functional language; and I've chosen *Haskell*.

After reading the first few chapters of the strangely titled "Learn You a Haskell for Great Good!" I began thinking about what problems I can try to solve using my new language, in order to help cement my understanding. That's when I remembered about Project Euler - a series of mathematical problems intended to be solved with computer programs. I've been meaning to do Project Euler for a while now, but kept putting it off; but since Haskell is a language well suited to solving mathematical problems, I thought this was a perfect opportunity to combine the two, in **ProJeX Haskell**: learning Haskell through using it to solve Project Euler problems (and presenting the mathematics using *LaTeX* - another thing I've been meaning to learn).

… [more]