A web programmer must be fluent in at least four languages: HTML, CSS, JavaScript, and a fourth language for writing server code. There’s nothing wrong with having specialized domain-specific languages — the problem is, they don’t fit together nicely. This is why a web developer has to learn the fifth language — the language of the application he or she uses to put together a web site. There are many such applications and each comes with a large set of rules and conventions. These applications are as flexible as their designers made them. They make common patterns easy to implement, but they don’t help with general programmability. For that you need a programming language, not an environment.

The idea behind the Yesod framework is to use an existing language, Haskell, to unify all aspects of web programming. There are many reasons why a functional language is a great fit for web programming — for instance, the way it deals with state and mutation matches very well the RESTful principles of client/server interaction.

I realize that most web programmers are not familiar with Haskell, so I decided to create a series of tutorials introducing Yesod for non-Haskellers. You’ll learn Haskell as you go, in small increments. Here’s the first installment of this tutorial. Enjoy!