This course aims to teach design and implementation of Functional Programming Languages. I will use Haskell as the programming language.
Any report/program/assignment you submit must clearly distinguish your contribution from others (webpages, softwares, report, discussions with other students). The penalty for copying in any form will be severe.
Important: All emails' subject line should begin with "[CS653]". Email not complying to this rule will NOT be entertained.
Our class page on Hello IITK. Subscribe it if you are crediting/auditing this course.
What comes below is a tentative plan for the course to help students to decide whether to take this course or not. Some changes are possible based on the (number of) students finally registered.
# | Description (# of Lectures) | Slides | References |
---|---|---|---|
1. | Introduction & Motivation (1) | [slides] | [Why FP Matters] |
2. | Motivation (1) | [slides] | |
3. | Introduction to Haskell (7) | [slides] | |
4. | + Functions and List Comprehension | [slides] | |
5. | + Data types, Pattern matching | [slides] | [Gentle Intro] |
6. | + Type Classes and Overloading | [slides] | [Paper-1][Paper-2] |
7. | + Numeric Class Hierarchy | [slides] | |
8. | + Monads | [slides] | [Paper-1] [Paper-2] |
9. | + IO, Modules | [slides] | |
10. | Lambda Calculus (2) | [slides] | |
11. | + Church Numerals, Y combinator | [slides] | |
12. | Type Checking | [slides] | |
13. | Type Checking, Unification | [slides] | |
14. | Type Inferencing | [slides] | |
15. | Enriched Lambda Calculus | [slides] | |
16. | Haskell to Enriched Lambda Calculus | [slides] | |
17. | Towards Compilation - Graph Reduction | [slides] | |
18. | Supercombinators, Lambda Lifting | [slides] | |
19. | G-Machine | [slides] | |
20. | G-Machine | [slides] |
There will be short assignments to give you a chance to apply the lecture material. Assignments will have some programming tasks.
Credit
Assignments | 10% |
Quizzes | 10% |
Mid semester exam | 25% |
End semester exam | 40% |
Course Project | 15% |
Why Functional Programming Matters?, John Hughes, Technical Memo of Institutionen for Datavetenskap, Chalmers Tekniska Hogskola, Goteborg, Sweden.
Haskell vs. Ada vs. C++ vs. Awk vs. ... An experiment in Software Prototyping Productivity, Paul Hudak and Mark. P. Jones, Technical report, Department of Computer Science, Yale University, New Haven, CT 06518.
A Gentle Introduction to Haskell, Paul Hudak, Yale University, John Peterson, Yale University, Joseph Fasel, Los Alamos National Laboratory.
Learn You a Haskell for Great Good!: A "hands-on" tutorial to learn Haskell.
Haskell Prelude contains specifications of useful predefined functions. First place to search for, if you need some generic functionality.
Practice Problems: Ninety-Nine Haskell Problems.
The Haskell 2010 Report. This is the language manual.
Introduction to Functional Programming using Haskell, R. Bird, Prentice Hall Europe, 1998.
Programming in Haskell, Graham Hutton, University of Nottingham Cambridge University Press, 2007, Book Website containing additional material: freely available powerpoint slides, lecture videos, Haskell code and exercise solutions.
The Implementation of Functional Programming Languages Simon Peyton Jones, published by Prentice Hall, 1987.
Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen. Online addition Available.
Algorithms, The Lambda Calculus and Programming, Abhijat Vichare, June 2009. An intutive description of lambda calculus and its use in programming.
An interactive Lambda tutorial.
Type classes in Haskell, Cordelia Hall, Kevin Hammond, Simon Peyton Jones, and Philip Wadler. April 1994.
How to make ad-hoc polymorphism less ad hoc, Philip Wadler and Stephen Blott. January 1989.
Imperative Functional Programming , Simon Peyton Jones and Philip Wadler. January 1993.
Monads for functional programming Philip Wadler. August 1992.
Both the papers use Scheme syntax to explain Y.
The Why of Y, Richard P Gabriel
A Lecture on the Why of Y, Matthias Felleisen
Last Modified at : Tue Apr 17 10:37:25 IST 2018