CSE 116: Intro to Functional Programming

Fall 2019


Jump to schedule

Meeting time and place

Lecture: Tuesdays and Thursdays from 3:20pm to 4:55pm Steven Acad 150.

Discussion Sections:

  • Monday from 4pm to 5:05pm @ Steven Acad 175
  • Wednesday from 7:10pm to 8:15pm @ Kresge Clrm 327

Lab sessions:

Computing Resources

We will use the Piazza site for communication, discussion, and announcements. All homework programming assignments will be distributed and submitted via GitLab.

Please use Piazza for communicating with course staff whenever possible. You will be more likely to receive a timely response.

If you would prefer to use a remote server to build and test your assignments, then you should be able to access grunhilda.soe.ucsc.edu with your CruzID blue password. However, I maintain this server myself, and I can't make promises about its uptime or how quickly issues will be resolved. It has your AFS home directories mounted, though, so even if it goes down, you shouldn't lose access to your data.

Text Resources

There are no required textbooks for this course, but using one or more of the following textbooks to expand your understanding of course topics is highly recommended. In particular, these textbooks are good sources of example problems to test your understanding of course concepts. When a free online copy is available (either a preprint or an ebook via the UCSC library), I've noted it below. More ebooks may become available through the library soon.

  • An Introduction to Functional Programming Through Lambda Calculus by Greg Michaelson. Free pre-print.
  • Thinking Functionally with Haskell by Richard Bird. Available online (free via library).
  • Programming in Haskell (2nd ed.) by Graham Hutton.
  • Real World Haskell by Bryan O'Sullivan.
  • Learn You a Haskell for Great Good by Miran Lipovača. Available free online
  • Write You a Haskell by Stephen Diehl. (incomplete, but useful) Available free online

Course Staff

Name Position Email Phone Office/consulting hours
Owen Arden Instructor Turn on JavaScript to view the email address 2-7044 Fridays 1pm-2pm, E2-349A
(please make a appointment)
Sohum Banerjea TA sobanerj@ucsc.edu Mondays, 2:00pm - 3:30pm, E2-397
Devesh TA ddevesh@ucsc.edu Wednesdays 4:00pm - 5:00pm BE-151
Austin Cheng Reader abcheng@ucsc.edu
Timothy Eppstein Reader/Tutor teppstei@ucsc.edu Mondays & Wednesdays, 10-11am, Crown 201
Carl Erez Tutor cerez@ucsc.edu Tuesdays & Thursdays, 5:30-6:30pm, Crown 201
Matthew Johnson Tutor maaajohn@ucsc.edu Fridays 10am-11am & 4pm-5pm, Crown 201
Kit Lao Tutor kilao@ucsc.edu Wednesdays 12pm-1pm, Crown 201
Art Parkeenvincha Reader tparkeen@ucsc.edu
Jacob Rowen Tutor tjnrowen@ucsc.edu Wednesdays & Fridays, 10-11am, Crown 201
Emily Soth Reader esoth@ucsc.edu
Vishal Swaminathan Reader vswamina@ucsc.edu


Students are evaluated on the basis of homeworks, labs, and a final exam. Regrades must be requested, in person, within 2 weeks of receiving graded assignment.
Class participation

Involves answering questions in-class via Google Forms.

Homework assignments

There will be 6 programming assignments, primarily in Haskell. You may work on these assignments individually or in groups of at most two, but all work must be submitted individually. Both individuals must clearly indicate membership in the group in their submission.

Midterm exam

Will be held during lecture (see schedule). Closed book, but you may use a double-sided “cheat sheet”.

Final exam

Will be held on Thursday June 13, from 12-3pm (location TBD). Closed book, but you may use a double-sided “cheat sheet”.

If your final grade is higher than your midterm grade, it will replace your midterm grade, but you must take both the midterm and the final.

Piazza extra credit

Extra credit for top 10 best participants on Piazza, decided by course staff.


Course data collection

We may, in the future, use anonymized data collected from in-class quizzes and other course assignments to improve learning outcomes for future CSE students. If you do not want us to use any data associated with you for these purposes, please opt out here.

Mandatory Course Requirements

You must receive a 60% or higher for your homework average and final exam grade to pass the class.

For example, doing well on the final but submitting poor (or no) homework solutions will see you fail the class.

Late submissions

You have a total of four late days that you can use throughout the quarter as you need them, where a late day means anything between 1 second and 23 hours 59 minutes and 59 seconds past a deadline. You should save your late days for when unexpected circumstances arise that prevent you from turning in your homework on time. It is very unlikely that additional extensions beyond these four days will be approved, so use them wisely.

To have your late submission graded, you must fill out this form.

DRC accomodations

UC Santa Cruz is committed to creating an academic environment that supports its diverse student body. If you are a student with a disability who requires accommodations to achieve equal access in this course, please submit your Accommodation Authorization Letter from the Disability Resource Center (DRC) to me privately during my office hours or by appointment, preferably within the first two weeks of the quarter. At this time, I would also like us to discuss ways we can ensure your full participation in the course. I encourage all students who may benefit from learning more about DRC services to contact DRC by phone at 831-459-2089, or by email at drc@ucsc.edu.

Schedule (subject to change)

# Date Topic/notes Assignments
1 Thu 09/26/19 Course overview and introduction (slides)
2 Tue 10/01/19 Lambda calculus (slides)
3 Thu 10/03/19 ...
4 Tue 10/08/19 ...
5 Thu 10/10/19 (canceled)
Fri 10/11/19 HW#0 due
6 Tue 10/15/19 Introduction to Haskell (slides)
7 Thu 10/17/19 Datatypes and Recursion (slides)
Fri 10/18/19 HW#1 due
8 Tue 10/22/19 ...
9 Thu 10/24/19 Higher-order functions (slides)
Fri 10/25/19 HW#2 due
10 Tue 10/29/19 Midterm (closed book, in class)
(Spr19 Midterm | Spr19 solutions)
(Midterm | solutions)
11 Thu 10/31/19 ... (HOF continued)
12 Tue 11/05/19 Environments and closures (slides)
Wed 11/06/19 HW#3 due
13 Thu 11/07/19 ... / Theorems about programs (slides)
14 Tue 11/12/19 ... / Polymorphism and type inference (slides)
15 Thu 11/14/19 ...
Sun 11/17/19 HW#4 due
16 Tue 11/19/19 ...
17 Thu 11/21/19 ...
18 Tue 11/26/19 Typeclasses (slides)
19 Tue 12/03/19 ...
Wed 12/04/19 HW#5 due
20 Thu 12/05/19 Final review (slides)
Mon 12/09/19 Final Exam (4pm - 7pm) | UCSD sample final (solutions)
UCSC Spr19 final

Calendar (subject to change)

Based on course materials developed by Nadia Polikarpova and Ranjit Jhala