Functional Programming

The aim of this course is to introduce the functional programming paradigm. Building and maintaining complex software requires a disciplined and modular approach to problem solving. Modern day functional programming offers significant advantage over imperative programming (See “Why functional programming matters”) when tackling complex programming tasks.

Any first course has to introduce the theoretical foundations, like lambda-calculus, type inference that are central to functional programming. However, I believe that unless there is hands on experience, much of this knowledge has no impact on the way we create software and use it. There are two ways in which I have tried to incorporate these real world aspects.

  1. Whenever we deal with a theoretical aspect of functional programming, we will also look at actual implementations. For example, when we study type inference, we will actually implement a type inference algorithm for a toy, but instructive, subset of a functional language.

  2. A semester long group project that involves building a non-trivial piece of software.

We will be using Haskell as the programming language for this course. Haskell is the de facto standard when it comes to pure functional programming language.

Basic information

Tentative list of topics to be covered.

Some applications written in haskell