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).