CSCI 312: Programming Language Design
General Information
![]() |
Professor: Simon D. Levy E-mail: simon.d.levy@gmail.com Lecture: TR 11:45am-1:15pm Parmly 405 Office Hours: MWF 2:00-4:00pm and by appointment. Zoom meetings are the preferred way to meet for office hours, but I am happy to meet in person given enough notice. |
Textbook: Miran Lipovača, Learn You a Haskell for Great Good. If that link isn’t working, you can read a free online copy of the book from the W&L library or purchase your own copy.
Objectives
By the end of the course you will be able to
In the process of learning these very practical skills, you will gain familiarity with the some of the most beautiful and elegant ideas in computer science, with profound connections to many other disciplines.
Content
Although I have taught this course many times, this is the first time that I have taught it using Haskell. For that reason we will borrow heavily from the content of a similar Haskell-based course at Pomona College.
Grading
The written work for the course will consist of
-
- Homework assignments, done with your lab partner (both of you turn it in to your github repository by 11:59pm on the due date): 50% of grade
- Two one-hour exams, 15% each = 30% of grade
- Comprehensive final exam: 20% of grade
Because of the rapid pace of the course, I will not accept late work without prior notice from the Dean’s Office.
Accommodations
Washington and Lee University makes reasonable academic accommodations for qualified students with disabilities. All undergraduate accommodations must be approved through the Office of the Dean of the College. Students requesting accommodations for this course should present an official accommodation letter within the first two weeks of the (fall or winter) term and schedule a meeting outside of class time to discuss accommodations. It is the student’s responsibility to present this paperwork in a timely fashion and to follow up about accommodation arrangements. Accommodations for test-taking should be arranged with the professor at least a week before the date of the test or exam.
Final Exam Policy
The final exam for this course will be given during the final exam week. You can take this exam during any of the regularly scheduled exam periods that week. You must supply an exam envelope to the instructor or the department administrative assistant no later than noon on the last day of class. You must specify a provisional day and time on the envelope, which you are free to change on the clipboard provided outside the door of Parmly 407 any time that week. Email or phone requests to reschedule will not be accepted.
The exam will be given in Parmly 405, and you should arrive promptly before the appointed time. If you are more than 15 minutes late, you will have to reschedule your exam. If you are more than 15 minutes late to the last exam period on Friday afternoon, you will receive a grade of 0 on your exam.
Students who have approved academic accommodations must make arrangements to use those accommodations directly with the instructor no later than the last day of class. Students approved for extra time will receive that time at the tail end of the morning exam period or before the beginning of the afternoon exam period (for example, ending at 1:30 PM for a morning exam or beginning at 12:30 PM for an afternoon exam). Students approved for a low-distraction testing location should reserve that space during the last week of classes (following instructions distributed by the Dean’s Office.
Honor System
Unless stated otherwise, the exams will be done without books or notes and without assistance from other people. For the programming assignments you should feel free to discuss approaches with other students, as long as you are not sharing or copying code.
Tentative Schedule
Monday | Tuesday | Wednesday | Thursday | Friday | |
10 Jan Week 1 |
Lecture: Introduction to PLs; PLs vs. Natural Languages Exercise: Setting up Haskell |
Lecture: PL History Exercise: Haskell Warmup Reading: Chapter 3 |
|||
17 Jan Week 2 |
Reading: Chapter 4 |
Reading: Chapter 5 | |||
24 Jan Week 3 |
|
Reading: Chapter 6 Due: Assignment 1 |
Reading: Chapter 6 |
||
31 Jan Week 4 |
Discussion: Abstract Syntax Trees Review for Exam #1 |
In-class Exam #1 | |||
07 Feb Week 5 |
Due: Assignment 2 |
Discuss Exam #1
Reading: Chapter 7 |
Reading: Chapter 8 | ||
14 Feb Week 6 |
Reading: Chapter 8 Discussion: Parsing with Difference Lists |
Reading: Chapter 8 | |||
28 Feb Week 7 |
Due: Assignment 3 |
Reading: Chapter 11 | Reading: Chapter 11 | ||
07 Mar Week 8 |
Reading: Chapter 11 Review for Exam #2 |
In-class Exam #2 | |||
14 Mar Week 9 |
Due: Assignment 4 |
Discuss Exam #2 |
Finish Chapter 11 Begin Assignment 5
|
||
21 Mar Week 10 |
|
||||
28 Mar Week 11 |
Chapter 12/13: Monads |
|
Guest Lecture by Dr. Geoffrey Matthews Due: Assignment 5
|
||
04 Apr Week 12 |
Chapter 12/13: Monads |
Review for final exam | |||
11 Apr Finals Week |
Due: Assignment 6 |