Stephen A. Edwards Columbia University Crown
COMS W4995 002
Parallel Functional Programming
Fall 2022

General Information

Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 451 CSB.


Name Email Office hours Location
Prof. Stephen A. Edwards by appointment
Christopher Yoon T 8-9P, F 3-4P Zoom (T); 1fl. Mudd TA room (F)
Leo (Feitong) Qiao W, Th 2-3P Zoom
Emily Sillars M 10-11A, 8-9P 1fl. Mudd TA room (10-11A); Zoom (8-9P)


Prerequisites: COMS 3157 Advanced Programming or the equivalent. Knowledge of at least one programming language and related development tools/environments required. Functional programming experience not required.

Functional programming in Haskell, with an emphasis on parallel programs.

The goal of this class is to introduce you to the functional programming paradigm. You will learn to code in Haskell; this experience will also prepare you to code in other functional languages. The first half the the class will cover basic (single-threaded) functional programming; the second half will cover how to code parallel programs in a functional setting.


Date Lecture Notes Due
Wed Sep 7 Introduction
Basic Haskell
Mon Sep 12 (Basics contd.)
Wed Sep 14 Types and Pattern Matching
Mon Sep 19 (Types contd.)
Wed Sep 21 Typeclasses and Polymorphism
Sun Sep 25 (no lecture; turn in homework)
Homework 1 .hs filehw1.hs
Mon Sep 26 (Typeclasses contd.)
Wed Sep 28 Recursion and Higher Order Functions
Mon Oct 3 (Recursion contd.)
Wed Oct 5 Using and Defining Modules
Sun Oct 9 (no lecture; turn in homework)
Homework 2 .hs filehw2.hs
Mon Oct 10 I/O
Wed Oct 12 Functors
Mon Oct 17 (Functors contd.)
Wed Oct 19 Monads
Mon Oct 24 (Monads contd.)
Wed Oct 26 (Monads contd.)
Mon Oct 31 Lazy and Parallel Evaluation
Wed Nov 2 Strategies
Mon Nov 7 Election Day Holiday
Wed Nov 9 (Strategies contd.)
Mon Nov 14 (Strategies contd.)
Wed Nov 16 The Par Monad
The Haskell Tool Stack
Mon Nov 21 Repa: Regular Parallel Arrays
Wed Nov 23 Thanksgiving Holiday
Mon Nov 28 Accelerate: GPU Arrays
Wed Nov 30 The Lambda Calculus
Mon Dec 5 (Lambda contd.)
Wed Dec 7
Mon Dec 12
Wed Dec 21 Final Project Report and Presentations

The Project

The project should be a parallel implementation of some algorithm/technique in Haskell. Marlow parallelizes a Sudoku solver and a K-means clustering algorithm in his book; these are baseline projects. I am looking for something more sophisticated than these, but not dramatically more complicated.

Do the project alone or in pairs. List all your names and UNIs in the proposal and final report

There are three deliverables:

  1. A one- or two-page proposal that gives the TAs and me an inda of what you plan to do so we can give you feedback about restricting or increasing the scope. Upload a PDF file to Courseworks describing your project and team members, if any.
  2. A report describing your project: what you implemented and how, some performance figures indicating how much better your solution runs in parallel (e.g., time its execution on one core and compare that to running it on multiple cores), and a full listing of the code you wrote. Upload a multi-page PDF file to Courseworks; due during Finals Week.
  3. Along with your report, submit a .tar.gz file including the code and test cases for your project. Make it so I can compile and run it, perhaps by including a README file with instructions for running it with the Haskell Stack. Due with the repot.

Strive for a little well-written, well-tested program that handles everything gracefully rather than a large, feature-filled system. If you're short on time, drop a feature in preference to improving the code you have.

Other project ideas include any sort of map/reduce application, graphics rendering, physical simulation (e.g., particles), parallel grep or word count, a Boolean satisfiability solver, or your favorite NP-complete problem. If your program is algorithmically simple (e.g., word count or word frequency count), it need to scale to huge inputs. AI (as opposed to machine learning) applications, such as game playing algorithms, are generally a good idea. Algorithms that have a lot of matrix multiplication at their core (e.g., deep learning) are less suitable.

Feel free to ask the instructor or TAs for project advice or criticism