About this course

CSCI 131 is a required course for CS majors introducing the fundamental concepts of programming languages (a/k/a PL a/k/a PLs). We’ll be using the functional programming language Haskell to study a variety of programming language features and implementation strategies. We’ll be covering topics like:

  • syntax and parsing
  • semantics and implementation
  • types and type safety
  • language design and trade-offs

We’ll be using John Mitchell’s Concepts in Programming Languages for readings and homework problems. As much as possible, we’ll learn by doing. There will be a lot of coding in this course! We’ll be using Haskell as an implementation language—but we’ll also learn a lot about functional programming and PL in general by using it.

Instructor and TAs

This course is taught by me—Michael Greenberg. The TAs are Joanna Finkelstein, Joshua Landgraf, and Ryan Luo. Our office hours are:

Day Time Location
Joanna Finkelstein Monday 7–9pm Edmunds 227
Joshua Landgraf Tuesday 7–9pm Edmunds 227
Ryan Luo Wednesday 7–9pm Edmunds 227
Prof. Michael Greenberg Thursday 1–4pm Edmunds 225

I’m available at other times by appointment—.


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.


You must have taken CS 52 and 62 (or CS 60 and CS 70 at Harvey Mudd).

You must have access to a copy of John Mitchell’s textbook, Concepts in Programming Languages, which we’ll be using for readings and homework problems.


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 platform (7.10.x).

The easiest way to install Haskell on your own computer is via the Haskell platform (7.10.x). 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.

Lectures and readings

The course home page has a listing of lectures and readings. I expect you to finish readings before class. Lecture listings far in the future (>1 week) are tentative.


There will be homework nearly every week, generally due on Thursday night. There will be a midterm and a final. Your grade for the course will be determined by your aggregate grades on:

  • homework (40%),
  • the midterm (25%), and
  • the final (35%).

Turning in homework

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

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.

Late policy

Each student may use a maximum of three late days during the course of the semester (note that weekend days count). Once those late days are used up, late homework will not be accepted.


Both the midterm and the final will be held in class. Both exams will have a mix of coding and writing. The final will be cumulative, covering all of the material in the course. According to the 5C exam schedule, our final exam will be on Wednesday, December 16th at 2pm.

Resubmission policy

Newly determined (as of 2015-10-21), you may resubmit one 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: 80% your new grade + 20% your old grade.

I’m happy to discuss solutions to homeworks one on one, but doing so means you can’t resubmit that homework.

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


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 also encourage you to discuss the text.

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. 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).

Later in the course, we’ll be using standard libraries. You’ll be free to find and use libraries within the Haskell platform. But don’t go crazy! The goal of this course is your understanding, not working code. If you can’t explain your solution to a homework problem, I don’t care whether or not it works—you’ll get a zero.

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.


Pomona students seeking academic accommodations should contact Jan Collins-Eaglin in the Dean of Students Office. You’ll need to meet with Jan to discuss appropriate accommodations and provide documentation as necessary.

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

We’re in this together

This is my first time teaching this course. 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.