*Last updated on 7th January 2016*

**
Graham HuttonSchool of Computer ScienceUniversity of Nottingham
**

The aim of this module is to teach the basic principles of functional programming, using the modern functional language Haskell. Broadly speaking, functional programming is a style of programming in which the primary method of computation is the application of functions to arguments. Among other features, functional languages offer a compact notation for writing programs, powerful abstraction methods for structuring programs, and a simple mathematical basis that supports reasoning about programs.

Textbook:

Lecture notes:

- Chapter 0 - Module introduction
- Chapter 1 - Introduction
- Chapter 2 - First steps
- Chapter 3 - Types and classes
- Chapter 4 - Defining functions
- Chapter 5 - List comprehensions
- Chapter 6 - Recursive functions
- Chapter 7 - Higher-order functions
- Chapter 9 - Interactive programs
- Chapter 10 - Declaring types and classes
- Chapter 11 - The countdown problem
- Chapter 12 - Lazy evaluation

- Module moodle page (internal version of this page)
- Haskell platform (the standard compiler and interpreter)
- Standard prelude (some useful library functions)
- Hoogle (for searching the libraries)
- Haskell home page (for all things Haskell)