Course Materials

USCS2009

Slides

Monday, August 17

Introduction: Introduction

Tuesday, August 18

Lecture A1: Quick Overview

Lecture B1: Untyped lambda calculus

Lecture C1: QuickCheck

Wednesday, August 19

Lecture A2: Introduction to Data Structures

Lecture B2: Typed lambda calculus

Lecture C2: Data structures

Thursday, August 20

Lecture A3: The IO Monad

Lecture B3: Kinds and Type inference

Lecture C3: Monads

Friday, August 21

Lecture A4: Classes and Instances

Lecture B4: Monad transformers

Lecture C4: Foreign Function Interface and GUI programming

Monday, August 24

Lecture C5: Lazy evaluation and profiling

Lecture C6: Introduction to Parser Combinators (dd. Monday 24, 23:52)

Tuesday, August 25

Lecture C7:

Lecture C8: Networking and Concurrency

Wednesday, August 26

Lecture C9: GADTs

Lecture C10: A Functional Prolog Interpreter

Friday, August

Software

We are going to use the Glasgow Haskell Compiler throughout the course. The current version is ghc-6.10.4, but any version of the 6.10.* series will do.

If you want to install Haskell, try to get the Haskell Platform. The platform consists of GHC plus a few extra libraries and tools. For Windows and Mac, there are binary installers that should make it easy to get you up and running. For Linux, you typically need to get a GHC installation and then can install the platform on top of it. The platform is currently based on ghc-6.10.3. This version is sufficient for the purposes of the course.

Development environment

There are not many good integrated development environments for Haskell. I therefore recommend to just use a good general-purpose editor for editing Haskell files and to call the compiler manually. Several editors have syntax highlighting for Haskell available. Both Emacs and Vim have special Haskell modes that give you some of the features typical IDEs offer. An IDE currently in development for Haskell is Leksah. However, because it is based on gtk2hs, it is not so easy to install. There are other IDE projects for Haskell, but they see limited development right now, and I will therefore not recommend them.

Lab environment

The machines we use for the computer lab run Linux with the Gnome desktop environment. They have ghc-6.10.4 installed. Furthermore, a wide range of Haskell packages are installed. If you need additional Haskell libraries during the course, please ask. We may be able to install them on the fly.

Text editors that are available include gedit (a simple text editor for the Gnome desktop environment), vim, and emacs. The Leksah IDE is also available.

Tutorials

In case you want to have look at Haskell before the Summer School, and are looking for free online material, I recommend the following online tutorials:

The first one is probably funnier than the second and has prettier pictures, the Wikibook covers a bit more of the language, though. Both tutorials are still in development as far as I know and may change and hopefully improve further.

A longer list of tutorials can be found on the Haskell Wiki.

Books

If you want to buy a Haskell book, I recommend the following:

  • Richard Bird: Introduction to Functional Programming using Haskell. Prentice Hall.
  • Graham Hutton: Programming in Haskell. Cambridge.
  • Bryan O'Sullivan, John Goerzen, and Don Stewart: Real World Haskell. O'Reilly.

The first is an excellent introduction to functional programming and explains the background and philosophy well. The second is a concise, short introduction to the most important Haskell concepts. Real World Haskell contains a lot of practical material, and is better suited as a second book on Haskell. The complete text of Real World Haskell is available online.

A list of books (also non-English books) is available on the Haskell Wiki.


Topic attachments
I Attachment Action Size Date Who Comment
pdfpdf A1.pdf manage 1227.0 K 19 Aug 2009 - 08:20 DoaitseSwierstra  
pdfpdf A2.pdf manage 1111.4 K 19 Aug 2009 - 08:06 DoaitseSwierstra  
pdfpdf B1.pdf manage 631.2 K 18 Aug 2009 - 06:34 AndresLoeh  
pdfpdf B2.pdf manage 583.4 K 20 Aug 2009 - 06:49 AndresLoeh  
pdfpdf B3.pdf manage 684.8 K 20 Aug 2009 - 06:50 AndresLoeh  
pdfpdf B4.pdf manage 423.4 K 21 Aug 2009 - 09:26 AndresLoeh  
pdfpdf C1.pdf manage 618.3 K 18 Aug 2009 - 06:35 AndresLoeh  
pdfpdf C2.pdf manage 618.8 K 20 Aug 2009 - 06:51 AndresLoeh  
pdfpdf C3.pdf manage 550.0 K 20 Aug 2009 - 14:19 AndresLoeh  
pdfpdf C4.pdf manage 483.3 K 23 Aug 2009 - 18:56 AndresLoeh  
pdfpdf C5.pdf manage 481.9 K 24 Aug 2009 - 12:04 AndresLoeh  
pdfpdf C8.pdf manage 352.8 K 26 Aug 2009 - 06:57 AndresLoeh  
pdfpdf C9.pdf manage 469.1 K 26 Aug 2009 - 07:00 AndresLoeh  
pdfpdf ClassesAndInstances.pdf manage 698.0 K 21 Aug 2009 - 13:11 DoaitseSwierstra  
pdfpdf DataStructures.pdf manage 1099.9 K 21 Aug 2009 - 13:51 DoaitseSwierstra  
pdfpdf IO.pdf manage 628.0 K 20 Aug 2009 - 09:30 DoaitseSwierstra  
pdfpdf Introduction.pdf manage 789.2 K 18 Aug 2009 - 10:39 DoaitseSwierstra Introduction
elsehs LazyExamples.hs manage 1.2 K 09 Sep 2009 - 20:59 DoaitseSwierstra Examples of lazy Evaluation: repmin and Breadth-First Labelling
elsehs Memo.hs manage 2.2 K 25 Aug 2009 - 09:58 DoaitseSwierstra  
pdfpdf PC-Introduction.pdf manage 683.7 K 24 Aug 2009 - 21:52 DoaitseSwierstra  
pdfpdf PC-Permutations.pdf manage 568.5 K 24 Aug 2009 - 21:58 DoaitseSwierstra  
elsehs ParseLib.hs manage 3.1 K 25 Aug 2009 - 21:57 DoaitseSwierstra A minimal parsing library
pdfpdf ParserCombinators.pdf manage 686.7 K 24 Aug 2009 - 20:26 DoaitseSwierstra  
elsehs Prolog.hs manage 4.9 K 26 Aug 2009 - 08:17 DoaitseSwierstra  
pdfpdf Prolog.pdf manage 554.2 K 25 Aug 2009 - 21:58 DoaitseSwierstra  
pdfpdf QuickStart.pdf manage 1232.8 K 21 Aug 2009 - 13:35 DoaitseSwierstra  
elseprl example.prl manage 0.8 K 26 Aug 2009 - 09:07 DoaitseSwierstra