As big
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 – Faulttolerant systems – Financial analysis – Comparison to other functional languages.

[1] Richard
Bird, Thinking Functionally with Haskell, Cambridge
University Press, 2014.
[2] Graham Hutton, Programming in Haskell, Cambridge
University Press, 2007.
[3] Kees Doets, Jan van Eijck, The Haskell Road to Logic,
Maths and Programming, 2nd Edition, College Publications,
2004.
[4] Greg Michaelson, An Introduction to Functional Programming
Through Lambda Calculus, Dover Publi cations, 2011.
[5] Chris Okasaki, Purely Functional Data Structures,
Cambridge University Press, 1999.
