Course Syllabus
Why take this course?
This course teaches you advanced techniques for functional programming, so that you can make your programs easier to read and compose. You might find some of these techniques useful even when using a "non-functional" language. You'll also draw some techniques from cutting-edge research.
Prerequisites
You should have some experience with functional programming and types before starting this course, such as taught in A596/B521/C311/H311. In particular, you should know how to write a continuation-passing interpreter and a type checker for a lambda calculus. In other words, the first few homeworks should be easy for you.
Instructors and meetings
Professor: Chung-chieh Shan ("Ken")
- Email: ccshan@indiana.edu
- Lectures (required): Sycamore 002, on Tuesdays and Thursdays from 11:15am to 12:30pm
- Office hours: Lindley Hall 230B, on Wednesdays from 2pm to 4pm, or by appointment
Assistant instructor: Kyle Carter
- Email: kylcarte@umail.iu.edu
- Recitations (required): Swain East 045, on Fridays from 9:30am to 10:45am
- Office hours: Lindley Hall 328, on Mondays from 1pm to 4pm, or by appointment
Do's and don't's
Check your official university email (@indiana.edu) Links to an external site. and Canvas for announcements.
Bring your laptop if you have one. It'll be useful for group work in class soon.
Start assignments early and submit them on time. To keep the course moving, here's the grading policy for late homework: if you submit it by the next lecture, you get half credit; otherwise, you get no credit.
Ask questions when you don't understand, or offer answers. You help your classmates either way. Do it during class meetings, or participate in our online discussions. In Canvas, go to "Discussions", then "+ Discussion" or reply to an existing topic.
When sending email to course staff or posting to the online discussion, use a descriptive subject. Put "AFP" in the subject of emails to course staff, so that the message stands out and is easy to file.
Please discuss homework with others! But everything you finally submit must be your own writing and list who you worked with. Group work should be submitted just once and list everyone in the group and who else you worked with. When in doubt, ask. Cheating cheapens everyone's degree and will not be tolerated. Please see IU's Code of Student Rights, Responsibilities, and Conduct Links to an external site..
Course Summary:
Date | Details | Due |
---|---|---|
Mon Jan 11, 2016 | Calendar Event Topic: Equational reasoning | 12am |
Thu Jan 14, 2016 | Assignment Equations and equivalence | due by 11:15am |
Mon Jan 18, 2016 | Calendar Event Topic: Pure lazy programming | 12am |
Tue Jan 19, 2016 | Assignment Equations and equivalence | due by 11:15am |
Assignment HW1: Equational reasoning | due by 11:15am | |
Mon Jan 25, 2016 | Calendar Event Topic: Functional abstraction | 12am |
Tue Jan 26, 2016 | Assignment HW2: Abstraction and Haskell | due by 11:15am |
Thu Jan 28, 2016 | Assignment Environment representation | due by 11:15am |
Mon Feb 1, 2016 | Calendar Event Topic: Algebraic data types | 12am |
Tue Feb 2, 2016 | Assignment Environment representation | due by 11:15am |
Assignment HW3: Typed interpreter | due by 11:15am | |
Thu Feb 4, 2016 | Assignment Why functional programming matters | due by 11:15am |
Mon Feb 8, 2016 | Calendar Event Topic: Type/constructor classes | 12am |
Tue Feb 9, 2016 | Assignment HW4: Algebraic data types | due by 11:15am |
Assignment Overloading and kinds | due by 11:15am | |
Assignment Why functional programming matters | due by 11:15am | |
Thu Feb 11, 2016 | Assignment Constructor classes | due by 11:15am |
Assignment Overloading and kinds | due by 11:15am | |
Mon Feb 15, 2016 | Calendar Event Topic: Type abstraction | 12am |
Tue Feb 16, 2016 | Assignment HW5: Type/constructor classes | due by 11:15am |
Thu Feb 18, 2016 | Assignment Parametricity | due by 11:15am |
Mon Feb 22, 2016 | Calendar Event Topic: GADTs and type-driven programming | 12am |
Tue Feb 23, 2016 | Assignment Data abstraction | due by 11:15am |
Assignment HW6: Type abstraction | due by 11:15am | |
Assignment Polymorphic type checking | due by 11:15am | |
Thu Feb 25, 2016 | Assignment Fun with phantom types | due by 11:15am |
Mon Feb 29, 2016 | Calendar Event Topic: Monads | 12am |
Tue Mar 1, 2016 | Assignment Generalizing algebraic data types | due by 11:15am |
Assignment Tackling the awkward squad | due by 11:15am | |
Mon Mar 7, 2016 | Calendar Event Topic: Monad transformers | 12am |
Tue Mar 8, 2016 | Assignment HW7: From data types to monads | due by 11:15am |
Assignment Tackling the awkward squad | due by 11:15am | |
Thu Mar 10, 2016 | Assignment Lazy functional state threads | due by 11:15am |
Mon Mar 14, 2016 | Calendar Event Spring break | 12am |
Mon Mar 21, 2016 | Calendar Event Topic: Defining monads and comonads | 12am |
Mon Mar 28, 2016 | Calendar Event Topic: Code generators | 12am |
Tue Mar 29, 2016 | Assignment HW8: Transforming and defining monads | due by 11:15am |
Assignment Staging | due by 11:15am | |
Thu Mar 31, 2016 | Assignment Code generation | due by 11:15am |
Mon Apr 4, 2016 | Calendar Event Topic: Continuation-passing code generators | 12am |
Tue Apr 5, 2016 | Assignment HW9: Staging and code generation | due by 11:15am |
Mon Apr 11, 2016 | Calendar Event Topic: Hygienic macros | 12am |
Tue Apr 12, 2016 | Assignment Capture | due by 11:15am |
Thu Apr 14, 2016 | Assignment Party planning | due by 11:15am |
Mon Apr 18, 2016 | Calendar Event Final project | 12am |
Tue Apr 19, 2016 | Assignment Functional reactive programming | due by 11:15am |
Assignment HW10: Hygiene | due by 11:15am | |
Thu Apr 21, 2016 | Assignment Pictures as functions | due by 11:15am |
Assignment Artist statement | due by 12:30pm | |
Thu Apr 28, 2016 | Assignment Composing diagrams | due by 12:30pm |
Mon May 2, 2016 | Calendar Event Finals week | 12am |
Assignment Party explanation | due by 5pm | |
Tue May 3, 2016 | Calendar Event Party | 5pm to 8pm |
Assignment Party contribution | due by 5pm | |
Thu May 5, 2016 | Assignment Future advice | due by 5pm |