data and multiple cores become ubiquitous, functional
programming has become relevant as never before. The
latest standards for popular programming languages like
C++ and Java have included support
for a large number of functional programming features.
This course aims to provide a thorough introduc- tion
to functional programming. It covers both the theoretical
underpinnings and practical, programming aspects.
1. Introduction to Functional Programming – Motivation – Defining features of the functional Paradigm – First
Class Functions – Referential Transparency – Introduction to Haskell – Data Types and Pattern Matching
– Laziness – Program Correctness
2. Lambda Calculus – Alpha, beta conversions – Normal forms – Applicative order – Reductions – Church
Rosser Theorems – Y combinator – Recursion – Proofs of correctness.
3.Classes for Numbers – Lists in Haskell – Basic List operations – Higher order list functions – List compre- hension – Strings and Tuples – User defined datatypes: lists, queues, trees.
4. Proving correctness of programs – Induction – Proofs using higher order functions – Infinite Lists – Lazy Evaluation – Efficiency – Controlling Space and Time complexity – Polymorphism – Conditional Polymor- phism – Type classes
Programming imperatively in Haskell – The IO Monad – Why Monads are Necessary – The State Monad
– ST Monad – Mutable and Immutable Arrays – Parsing using Monads – Applications – Fault-tolerant systems – Financial analysis – Comparison to other functional languages.
Bird, Thinking Functionally with Haskell, Cambridge
University Press, 2014.
 Graham Hutton, Programming in Haskell, Cambridge
University Press, 2007.
 Kees Doets, Jan van Eijck, The Haskell Road to Logic,
Maths and Programming, 2nd Edition, College Publications,
 Greg Michaelson, An Introduction to Functional Programming
Through Lambda Calculus, Dover Publi- cations, 2011.
 Chris Okasaki, Purely Functional Data Structures,
Cambridge University Press, 1999.