CS 5965 – Functional Programming Studio

Spring 2016

Monday and Wednesday, 11:50am-1:10pm, WEB 1460

Instructor:

 

Matthew Flatt

Office Hours:

 

by appointment (send e-mail)

For general information, see the Course Description below.

Schedule

Jan 11

  

Introductions; Sudoku Solver

Jan 13-27

  

Sudoku solvers, clients, and servers

Feb 1

  

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

Feb 3

  

Sudoku code reviews; Dominion Protocol v1

Feb 8

  

Monads [Sarah]

Feb 10

  

Lenses [William H.]

Feb 17

  

Initial dominion players; example v1 implementation

Feb 22

  

Closure compilation; see also Feely87

Feb 24

  

Dominion players; Dominion Protocol v2

Feb 29

  

Concurrent ML; see also references

Mar 2

  

Dominion code reviews; example v2 implementation

Mar 7

  

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

Mar 9

  

Dominion v2 players; Dominion Protocol v3

Mar 21

  

JavaScript promises [Zef]; example v3 implementation

Mar 28

  

Delimited continuations; see also Flatt07

Apr 4

  

Scribble as a DSL

Apr 11

  

Project reports: Annie, Victor

Apr 13

  

Project reports: Erich, Kyle, William S., Chris

Apr 18

  

Project reports: Andrew, Dan, Sarah, Tobin

Apr 20

  

Thesis report: Dan; project reports: Zef, William H.

Apr 25

  

Project reports: Nick, Guannan, Tim, Pierce, Sam

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

All students are expected to follow the University’s student code. See also the College of Engineering’s academic guidelines.