CS 583: Advanced Functional Programming (Spring 2021)
Instructor: | Eric Walkingshaw () |
Lectures: | T/Th, 10:30–11:50am, Zoom (link on Canvas) |
Office Hours: | Tues, 12:00–1:00pm, Zoom (link on Canvas) |
Course Logistics
This webpage is a “living syllabus”. All information you need for the class is provided or linked here, and every effort will be made to keep that information up-to-date.
Course Description – A brief overview of the content, goals, and philosophy of the course.
Grading and Collaboration Policy – How grades will be computed and policy for collaboration in various aspects of the class.
Community Statement – Every student should feel safe and welcome to contribute in this course. Please read this statement and let’s work together to make this a great environment for everyone.
Haskell Links and Resources – How to install GHC and Haskell packages. Also includes several tutorials, freely available books, and other resources that you should use to supplement the content of this class.
Hasklets – Describes the rationale and logistics for the small assignments we’ll use to practice concepts from the course and facilitate discussion.
Functional Programming Project – Describes the rationale and logistics for the project that you will be working on throughout the term.
Course Content
All content for the course will be posted below. This will included required and optional readings, slides, and examples from lectures. I will often post an initial version of an example before lecture so that you can follow along more easily, then post the updated version after class.
Course Introduction (Mar 30)
How to FP (Mar 30–Apr 6)
- Slides: 1.HowToFP.pdf
- Code and examples:
- Additional reading (optional):
- John Hughes, Why Functional Programming Matters
- Phil Wadler, Theorems for Free!
Refactoring (Apr 8)
- Slides: 2.Refactoring.pdf
- Code and examples:
- Additional reading (optional):
- John Backus, Can Programming Be Liberated from the Von Neumann Style?
- Richard Bird, Pearls of Functional Algorithm Design (free via OSU Library)
Higher-Order Data (Apr 13–20)
- Slides: 3.HigherOrderData.pdf
- Code and examples:
- Additional reading (optional):
Type Classes (Apr 20–22)
- Slides: 4.TypeClasses.pdf
- Additional reading (optional):
Type Constructor Classes and Functors (Apr 27–29)
- Slides: 5.Functors.pdf
- Code and examples:
Monads (Apr 29–May 11)
- Slides: 6.Monads.pdf
- Code and examples:
- Additional reading (optional):
- Phil Wadler, Monads for Functional Programming
Monad Transformers (May 18–20)
- Slides: 7.MonadTransformers.pdf
- Code and examples:
- Additional reading (optional):
- Sheng Liang, Paul Hudak, Mark Jones, Monad Transformers and Modular Interpreters
Free Monads (May 20–25)
- Code and examples:
Phantom Types (May 25)
- Code and examples:
Generalized Algebraic Data Types (May 25–27)
- Slides: 8.GADTs.pdf
- Code and examples:
Purely Functional Data Structures (May 27–Jun 3)
- Slides: 9.DataStructures.pdf
- Code and examples:
- Additional reading (optional):
- Chris Okasaki, Purely Functional Data Structures
Graph Reduction (Jun 3)
- Slides: 10.GraphReduction.pdf
- Additional reading (optional):
- Graph Reduction, Haskell Wikibook
- Laziness, Haskell Wikibook
Bonus: Expression Problem
- Additional reading (optional):
Deliverables
All deliverables will be posted as assignments in Canvas with direct links to the relevant pages. The table below is just a reference to make the course web page more self-contained.
All deadlines are “end of day” on the due date, that is, 11:59pm Pacific time unless otherwise noted.
Mar 31 | Introduce Yourself! |
Apr 2 | Hasklet #1 |
Apr 5 | Hasklet #1 Feedback |
Apr 14 | Hasklet #2 |
Apr 21 | Project Proposal Draft |
Apr 26 | Project Proposal Feedback |
Apr 30 | Project Proposal Revision |
May 3 | Hasklet #3 |
May 12 | Project Milestone #1 |
May 17 | Hasklet #4 |
May 19 | Project Milestone #1 Feedback |
May 26 | Project Milestone #2 |
Jun 1 | Project Milestone #2 Feedback |
Jun 9 | Final Project Submission |
Reach Out for Success
University students encounter setbacks from time to time. If you encounter difficulties and need assistance, it’s important to reach out. Consider discussing the situation with an instructor or academic advisor. Learn about resources that assist with wellness and academic success at https://oregonstate.edu/ReachOut. If you are in immediate crisis, please contact the Crisis Text Line by texting OREGON to 741-741 or call the National Suicide Prevention Lifeline at 1-800-273-TALK (8255).
Accommodations for Students with Disabilities
Accommodations for students with disabilities are determined and approved by Disability Access Services (DAS). If you, as a student, believe you are eligible for accommodations but have not obtained approval please contact DAS immediately at 541-737-4098 or at http://ds.oregonstate.edu. DAS notifies students and faculty members of approved academic accommodations and coordinates implementation of those accommodations. While not required, students and faculty members are encouraged to discuss details of the implementation of individual accommodations.