Instructor: Amey Karkare  TA: Barnali Basak  Timings: Tue, Fri: 10 AM; Wed: 11 AM  Classroom: CS 103 
This course aims to teach design and implementation of Functional Programming Languages. I will use Haskell as the programming language.
Moodle Link(Internal to IITK) for the course. All students crediting and auditing the course are requested to register. We will use it for submission of assignments.
Assignments (2)  10% 

Quizzes (best 2 out of 3)  10% 
One of Project/Term Paper  10% 
Midsems (2 x 15%)  30% 
Endsem  40% 
Date  Topics  Remarks 

Fri, Nov 19  End semester exam  Paper with solutions 
Wed, Nov 03  Quiz #3  Solutions 
Sun, Oct 31  Translation of List comprehension  Translation Notes 
Fri, Oct 29  From Haskell to enriched lambda calculus  Translation Notes 
Wed, Oct 27  From Haskell to enriched lambda calculus  Translation Notes 
Tue, Oct 26  From Haskell to enriched lambda calculus  Translation Notes 
Fri, Oct 22  No lecture due to ANTARAGNI  
Wed, Oct 20  Unification and Type Inferencing  Prof Sanyal's Notes 
Tue, Oct 19  Unification  Prof Sanyal's Notes 
Oct 10  Oct 17 Midsem Recess  No Lectures  
Thu, 07 Oct  Midsem #2  Solutions 
Wed, 06 Oct  Type Checking  Prof Sanyal's Notes 
Tue, 05 Oct  Type Checking  Prof Sanyal's Notes 
Fri, 01 Oct  Type Checking  Prof Sanyal's Notes 
Wed, 29 Sep  Quiz #2  Quiz #2 Solutions 
Tue, 28 Sep  Revision of Monads  
Fri, 24 Sep  Recursion and Y combinator  Two papers explaining Why of Y 
Wed, 22 Sep  Recursion and Y combinator  Two papers explaining Why of Y 
Tue, 21 Sep  Data structures (list, pair), Useful functions  References: 1 , 2 ; An interactive tutorial. 
Fri, 17 Sep  Church Numerals, Booleans  References: 1 , 2 ; An interactive tutorial. 
Wed, 15 Sep  Lambda Calculus: lambda terms, beta, eta conversion, Normal form, ChurchRosser theorem statement, Normal order reduction, normalisation theoerm statement  References: 1 , 2 ; An interactive tutorial. 
Tue, 14 Sep  Lambda Calculus: lambda terms, alpha renaming, beta conversion  References: 1 , 2 ; An interactive tutorial. 
Fri, 10 Sep  Monads and I/O  AS notes, PeytonJones/Wadler's Papers 1, 2 
Wed, 08 Sep  Monads and I/O  AS notes, PeytonJones/Wadler's Papers 1, 2 
Tue, 07 Sep  Midsem discussions  Midsem solutions (some solutions may not be exact) 
Mon, 30 Aug  First Midsemester exam  No class this week (30th Aug  3rd Sep) 
Fri, 27 Aug  I/O and Monads  Gentle Introduction, Section 7, 9 
Wed, 25 Aug  Overloading Examples, I/O in Haskell  Gentle Introduction, Section 7 
Tue, 24 Aug  Overloading in Numeric Classes  Gentle Introduction, Section 10 
Fri, Aug 20  Type Classes and Overloading  Gentle Intoduction Section 5, Type classes in Haskell, How to make adhoc polymorphism less ad hoc 
Wed, Aug 18  Type Classes and Overloading  Gentle Intoduction Section 5, Type classes in Haskell, How to make adhoc polymorphism less ad hoc 
Tue, Aug 17  Discussion on Quiz #1 and Assignment #1, Type classes recap.  
Fri, Aug 13  Quiz #1.  Solutions. 
Fri, Aug 06  Use of let and where in Expressions, Type Classes.  Gentle Intoduction Section 5, Type classes in Haskell, How to make adhoc polymorphism less ad hoc 
Fri, Aug 09  Lazy Pattern Matching.  Section 3.17 of Haskell Report, Section 4.2.7, 4.3.4, 4.3.5 of Implementation book. 
Wed, Aug 06  Functions, Currying, Lambda abstractions, Infinite data structures.  Finished 3rd section of Gentle Introduction. 
Tue, Aug 03  User defined data types, List comprehension (Gentle Introduction).  
Fri, July 30  Discussions on Assignment#0; Started Introduction to Haskell using Gentle Introduction.  Covered Sect. 1  2.3 
Wed, July 28  Motivation/Paper reading continued.  Read section 3, 4 of "Why Functional Programming Matters". 
Tue, July 27  Administrative stuff, Motivation, Reading of "Why Functional Programming Matters".  Note: In paper, foldr is referred
as reduce
