CS-429: Functional Programming


Text / Readings
Computing Resources
Lecture Slides

Fall 2004 Course Overview

From the Blue Book: 

    "Methods for synthesizing functional programs from formal specifications and verifying correctness properties of programs.  Topics include higher-order functions, pattern-matching, abstract algebraic data types, polymorphic types, advanced typing issues such as type classes and higher-order modules, lazy/eager evaluation, equational reasoning, and realization of effects via continuations and monads.  The functional language Haskell and/or ML is used."  [In fact Haskell will be used this term.]

Note: this course is quite a bit different from the functional programming ideas learned in CS201, for three reasons: (1) the language used, Haskell, is very different from both Scheme and ML, (2) many more advanced ideas will be explored, such as monads, monad transformers, arrows, type classes, kinds, lazy evaluation, etc., and (3) several interesting "multimedia" applications will be explored, such as graphics, animation, computer music, and robotics.

Also, although the ideas taught in this course do not appear in many mainstream languages such as Java or C++, they are nevertheless powerful tools that can be used in the construction of any robust, modular, and effective software system.  Many of the ideas can be used to at least think about and structure Java programs, for example, and many of the ideas are likely to appear in future mainstream languages, just as Java uses many ideas invented 20 years ago in programming language research.


You should have taken CS-201 and CS-202 (or equivalents), and have a couple of years of programming experience.  CS-223 (or equivalent) is also recommended, but not required.

Meeting time and place:

MWF, 10:30-11:20 AM,  in  AKW 200.

Instructor: Teaching Fellow:
Paul Hudak Hong Jiang
308 AKW 405 AKW
432-1235 436-1252
paul.hudak@yale.edu hong.jiang@yale.edu
Office hours (308 AKW):
    MWF 11:30-12:15
Office hours (405 AKW):
    Tuesdays 3-5 PM
      Thursdays 7-9 PM

Web Page and Discussion Forum:

This web page (plucky.cs.yale.edu/cs429) will be the source of programming assignments, solutions, reading material, and other relevant information.  We will also use the Yale Classes Server (classes.yale.edu) as a resource for a chat room and, more importantly, a discussion forum.  Please read the forum regularly -- it may contain important information, such as hints for and/or corrections to homework assignments!  To use the forum, you need to enroll in the course, log into classes.yale.edu , and then click on "Forum" at the bottom of the webpage.

Required Work:

There will be several problem sets and a final exam (no mid-term).  The work will be graded by your TA and returned, along with solutions, nominally within one week.  Late work will be accepted at the discretion of the instructor and/or TA.  However, assignments turned in after solutions have been published will not be accepted, even with a Dean's excuse, although alternative make-up work may be authorized under special circumstances.

It should go without saying that when you hand in (electronically or otherwise) a paper with your name on it, I assume that you are certifying that this is your work, and that you were involved in all aspects of it.  It's Ok to work with other students on the concepts underlying an assignment, but you are expected to do the actual assignment on your own, based on your own level of progress with the material.

Your grade will be based on a combination of homework assignments and the final exam (or final project).  You are expected to do all of the homework assignments, which will count as a significant part of your grade!

Happy Haskell Hacking!!