Stephen A. Edwards Columbia University Crown
COMS W 4995 001
Parallel Functional Programming
Fall 2026

Meeting Times

Class meets Mondays, Wednesdays 1:10 - 2:25 PM in 451 CSB.

Staff

Name Email Office hours Location
Prof. Stephen A. Edwards sedwards@cs.columbia.edu by appointment
Jonathan Yang Chen jyc2183@columbia.edu tba

Overview

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.

Schedule

Date Lecture Notes Due
Wed Sep 9 Introduction
Basic Haskell
pdf
pdf
Mon Sep 14 (Basics contd.)
Wed Sep 16 Types and Pattern Matching
pdf
Sun Sep 20 Homework 1 .hs filehw1.hs
Mon Sep 21 (Types contd.)
Wed Sep 23 (Types contd.)
Mon Sep 28 Monads and IO
pdf
Wed Sep 30 (Monads contd.)
Mon Oct 5 (Monads contd.)
Wed Oct 7 (Monads contd.)
Sun Oct 11 Homework 2 .hs filehw2.hs
Mon Oct 12 Lazy Evaluation and Seq
pdf
Wed Oct 14 Lazy Evaluation and Seq (contd.)
Sun Oct 18 Project Proposal
Mon Oct 19 (no lecture)
Wed Oct 21 (no lecture)
Sun Oct 25 Homework 3 .zip filehw3.zip
Mon Oct 26 (no lecture)
Wed Oct 28 Strategies
pdf
Sun Nov 1 Homework 4 .pdf filehw4.pdf
Mon Nov 2-3 Election Day Holiday
Wed Nov 4
Mon Nov 9 The Par Monad
pdf
Wed Nov 11 The Haskell Tool Stack
Repa: Regular Parallel Arrays
pdf
pdf
Mon Nov 16 Accelerate: GPU Arrays
pdf
Wed Nov 18 The Lambda Calculus
pdf
Mon Nov 23 (Lambda contd.)
Wed Nov 25-27 Thanksgiving Holiday
Mon Nov 30
Wed Dec 2
Mon Dec 7
Wed Dec 9
Mon Dec 14
Tue Dec 22 Final Project Exams

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 in groups of 2 or 3. List all your names and UNIs in the proposal and final report

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

See the N-queens repository and report as an example of the sort of project we are looking for. That is, start with a simple sequential implementation of an existing algorithm, improve its speed and memory footprint in a sequential setting, then parallelize it and improve it further. A good metric to optimize is how much your implementation speeds up when given, say, 8 cores compared with 1. You can use these speedup numbers to estimate the "parallel fraction" suggested by Amdahl's law, another interesting metric.

Resources

Past Instances