**Instructor**: Amey Karkare (, )**Timings**: Tue, Fri 2:00 PM - 3:15 PM**Venue**: RM 101, Dept of CSE**TAs**: Bishwas C Gupta (), Rahul Mishra (), Vishwesh Jatala ()

This course aims to teach design and implementation of Functional Programming Languages. I will use *Haskell* as the programming language.

- Code of Ethics
- Announcements
- Course Outline
- Evaluation Scheme
- Topics covered and handouts
- Assignments
- Course Project
- Supporting Material
- Recommended References

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.

**Project Description**will come Here

**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.

- http://www.haskell.org: This site contains most of the material you need for this course.

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