CS 6963 – Functional Programming Studio

Spring 2019

Tuesday and Thursday, 12:25am-1:45pm, WEB 1460



Matthew Flatt

Office Hours:


by appointment (send e-mail)

For general information, see the Course Description below.


Jan 8


Introductions and Sudoku Solver and Generator

Jan 10


Language and Sudoku presentations: Simon, Russell, Junior

Jan 15


Language and Sudoku presentations: Stone, John, Steve

Jan 17


Language and Sudoku presentations: Jen, Shaobo, Akshay

Jan 22


Recursion, loops, stacks, tail calls, and space safety

Jan 24


Language and Sudoku presentations: Sirus, Maryam, Mike

Jan 29


Santorini Player

Jan 31


no meeting

Feb 5


Santorini discussion

Feb 7


no meeting

Feb 12


Santorini presentations: Anthony, Liam, Shen

Feb 14


Santorini presentations: Kenway, Yaodong, Xinbo

Feb 19


Monads as a DSL framework



Santorini Checker and Player with Cards

Feb 21


Closure compilation; see also Feely87

Feb 26


Santorini with cards presentations: Thanhson, Simon, Russell

Feb 28


Santorini with cards presentations: Stone, Junior, Kenway

Mar 5


Santorini with cards presentations: Jen, Mike, Shen

Mar 7


Functional pictures; see also Slideshow, Universe

Mar 12


spring break

Mar 14


spring break

Mar 19


Concurrent ML; see also references

Mar 21


Project proposals: everyone

Mar 26


Functional data structures: Okasaki96; queues; AVL trees; HAMTs

Mar 28


Lenses: William Hatch

Apr 2


no meeting

Apr 4


no meeting

Apr 9


Project reports: Akshay, Mike, Stone, Junior

Apr 11


Project reports: Steve, Simon, Shaobo, Sirus

Apr 16


Project reports: Liam, Kenway, Russell, Vinod

Apr 18


Project reports: Jen, Xinbo, Shen

Apr 23


Project reports: Anthony, Thanhson, Yaodong

Course Description

This programming course is intended for students who have taken a programming-languages course and who are interested in gaining more experience with functional-programming languages and techniques.

There are no lectures or exams for the course. Students are graded on the completion of open-ended coding assignments and, equally importantly, class participation. Class participation includes presenting programs and discussing the presented work of other students.

Students may use any functional programming language for completing assignments, and diversity of language choices will be encouraged. Suitable functional languages include (but are not limited to) Racket, Haskell, Scala, OCaml, F#, SML, Erlang, Clojure, Common Lisp, Agda, Idris, and Elm.

Student Code and Academic Guidelines

For information on withdrawing from courses, appealing grades, and more, see the college’s academic guidelines. For information on repeating a class, co-requirements, academic misconduct, and more, see the department’s policies and guidelines.