About this course

CSCI 181 is an elective about deeply exploring functional programming languages. We’ll be using the functional programming language Haskell. We’ll be covering topics like:

  • syntax and parsing
  • semantics and implementation
  • structuring effects and I/O

As much as possible, we’ll learn by doing. There will be a lot of coding in this course, culminating in an open-ended project.

Instructor and TAs

This course is taught by me—Michael Greenberg. My office hours are:

Day Time Location
Prof. Michael Greenberg Thursday 11am–noon Millikan 1249
Prof. Michael Greenberg Wednesday 10am–noon Edmunds 225

I’m available at other times by appointment—send me an email.

Piazza

We will be using Piazza for class discussion. Instead of emailing questions to me or the TAs, please post your questions on Piazza. If you have any problems or feedback for the developers, email team@piazza.com.

Requirements

You must have taken 62 (or 60/70 at Harvey Mudd). 101 is recommended but not necessary.

Reading materials

There is one book associated with this course: Programming in Haskell by Graham Hutton. It is recommended but not at all required.

Hutton’s book will be a helpful reference as you learn Haskell in the first half of the course.

There are other resources available on the Internet, but none of them are as good. Many people like Learn You a Haskell for Great Good, but some of its examples are needlessly insensitive. Be especially careful using the Internet to learn Haskell, as people often explain things incorrectly or in ways very different from what we’ll do in the course.

Software

Programs for this course will be run on the Pomona College Computer Science department’s lab facilities, based in Edmunds 227. You are welcome to use other computers to write and test your programs, but they must run on our facilities. You may log in remotely to any of the lab machines using ssh. Please do not log into any of our servers (e.g., project or xserv) to do homework.

If you do not have an account on the Pomona College Computer Science network, please request one immediately.

All of the work will be in the Haskell programming language. Haskell should already be available on all of the lab computers. To get started on your own computer, you’ll want to install the Haskell Stack.

Most people I know use their preferred text editor—emacs, for me—with an appropriate mode for Haskell. FP Haskell Center’s IDE offers syntax highlighting and a few refactoring tools, but they don’t seem to have REPL support, so I can’t recommend it.

Grading

Your grade will be computed as a weighted average of the coursework:

  • 25% homework
  • 35% midterm
  • 40% final project

Homework

Homework will be a mix of code and written assignments, typically as a single Haskell file. You’ll submit homework via the new submission page.

The first homework must be done solo, but the next three homeworks will be done in randomly selected pairs. After that, you’ll be allowed to work alone or in groups of up to three.

Homework that doesn’t compile, due to syntax or type errors, gets no points. Homeworks will be graded not only for correctness, but for clarity.

Some common mistakes that lead to homework that doesn’t compile:

  • Naming the file something other than HwXX.lhs (or, if you convert it from Literate Haskell to plain Haskell, HwXX.hs)
  • Changing the module HwXX where line
  • Deleting a definition
  • Changing the type of a definition

Group work

Homeworks two, three, and four must be done in pairs.

In pair programming, one person types while the other thinks. (Really, both people should be thinking. One drives while the other navigates.) Be careful to take turns, so no one monopolizes either task. If you’re pair programming, the entire group only needs to submit once, but make sure that each person who helped prepare the submission is listed as a submitter—and no one else.

If there is anyone in the class you would prefer not to pair with, please let me know as soon as possible. I don’t need to know why, and your request will remain private. Complaints after I’ve assigned partners are much harder to address.

If you have an issue with your group, please come to me as soon as possible so I can help you resolve it. You are expected to work with your group on all of the problems. It may seem attractive to split up the homework so that each person does just one problem. Whoops: you just split up the learning, too. Do it together.

Late work, resubmission, and regrading

No late work will be accepted, barring serious illness or similar emergencies. However: you may resubmit one autograded homework a week. Any given homework can be resubmitted only once, and I will only regrade the automatic parts. Your new grade will be calculated as a weighted average: 75% your new grade + 25% your old grade. You may not bank resubmissions to be redone in bulk—I really will only grade one resubmission per week.

I’ll only allow resubmissions for autograded work, not for the manually graded parts of assignments.

I’m happy to discuss solutions to homeworks one on one.

Resubmission works best via email, not the submission page. If you don’t tell me that you’re resubmitting, I won’t notice.

There will be no extensions possible for the project.

Quizzes

I’ll hold quizzes in class sometimes. Quizzes won’t be for a grade—they’re meant to help me (and you!) assess what you are and aren’t learning.

Exams

The midterm will be held in our classroom during class time. The exam will have a mix of coding and writing. There is no final—just a final project.

If you seek accommodations, please see the accommodation policy below.

Project

The project makes up the bulk of your course grade (40%) and will be done as a group of two to four people. It is not possible to pass the course without submitting a project. At the end of the course, you will present about your project, submitting code and writeup on April 30th, before presentations.

Expectations

Learning any new language is hard—and I expect Haskell is rather different from what you’re used to. I encourage you to help each other learn the language. I hope the pair programming exercises will help you learn together.

However: all work in the course must be your own. As explained in the student handbook, this means that the work you turn in must represent only your own work. It must not be based on help from others or information obtained from sources other than those approved by the instructor. Examples of acceptable sources of information include:

Examples of unacceptable sources of information include:

  • Stack Overflow and Quora
  • #haskell

You should never read or copy another student’s solutions (code or otherwise), exchange files, or share your solutions with anyone else in the class until after everyone involved has turned in their work.

Please do discuss the homework though. If a discussion with another student helped you find your answer, mention that in a comment. It’s hard to tell the difference between uncredited help and plagiarism (because they’re the same thing).

These rules apply to homework, not the final project. On the final project, I encourage you to use every resource available to you. I do, however, expect you to respect licenses and copyright and to be clear up front about what code you’ve written.

If any of this is unclear, please: just ask me.

Failure to abide by these rules is considered plagiarism, and will result in severe penalties. The first offense typically results in failing the assignment and referral to the appropriate college office or committee—which may mean further consequences. See the CS Academic Honesty Policy and Pomona Academic Standards. for further information. Please don’t put anyone—me, you, or anyone else—in this unpleasant situation.

Accommodations

Pomona students seeking academic accommodations should contact disability support in the Dean of Students Office. You’ll need to meet with someone there to discuss appropriate accommodations and provide documentation as necessary. If you want accommodations on exams or homework, it is your responsibility to inform me in advance.

Students from other colleges should contact their home college’s disability coordinator for accommodations. The coordinators are, to my knowledge:

We’re in this together

Let’s make a deal. My side: if things aren’t working, I’ll change them. Your side: if things aren’t working, you’ll tell me.