Throughout most of the course, we will use the functional programming language Haskell. In particular, we will use Haskell as a metalanguage for describing programming language concepts. It is therefore absolutely essential that you develop your Haskell programming skills!

To be successful in this course, you will have to consult other Haskell resources and write Haskell programs outside of class (beyond the homework assignments and the in-class exercises). The following resources should provide several options.

• Haskell Platform – The easiest way to start using Haskell. I will assume you have this installed.

• Hackage – The central package archive for the Haskell community. There are lots of useful libraries here. You can install them using the cabal tool, which comes with the Haskell Platform. First, run the following command to download the list of packages on Hackage.

cabal update

Then you can install new packages by running the following command.

cabal install [package-name]
• How to cabal install – A longer tutorial about installing packages from Hackage, in case you run into problems.

• Doctest – A useful tool for running examples in comments as unit tests. We’ll use this in some Homework assignments. You can install doctest using cabal install doctest, as described above.

You will probably also need to add the installation directory to your \$PATH. Here are my best guesses as to where that will be:

• Linux: ~/.cabal/bin
• Mac: ~/Library/Haskell/bin
• Windows: C:\Program Files\Haskell\bin

### Haskell Tutorials and Reference Manuals

• Introduction to Haskell by Brent Yorgey – An excellent, concise introduction to Haskell. I’ll assign reading from this book/tutorial in the first couple of weeks.

• Haskell: The Confusing Parts – An FAQ especially for folks coming to Haskell from a C/Java background, which I guess is many of the people in this class.

• Haskell Wikibook – An easy-to-navigate and thorough resource.

• A Gentle Introduction to Haskell – Famous for being not-so-gentle, but a really great resource for refining your understanding of Haskell, once you get the basics down.

• Learn You a Haskell for Great Good! – A tutorial written in a casual style that starts from the very beginning. Some offensive humor.

## Prolog

In the last couple weeks of the course, we will use the logic programming language Prolog. As with Haskell, I strongly recommend you supplement the course material with reading and exercises outside of class.

• SWI-Prolog – The Prolog environment we’ll be using. I’ll assume you have this installed.

• Learn Prolog Now! – This book provides a good introduction to Prolog and plenty of exercises for practice. Available for free online.

• An Introduction to Logic Programming through Prolog – A free older textbook based on Prolog. I haven’t read this one but it looks like a pretty good resource.

• Prolog Wikibook – Another one I haven’t read, but looks like a pretty good resource.