EECS 662

Programming Languages


EECS 662 Blog

Exam Grades

Exam grades should be available online. This assumes that I set the visibility options correctly. I think I did, but blackboard can be mysterious.

Project 1 Due Date

In class Tuesday I set the due date for Project 1 for October 6. I would like to push the due date to October 8. I forgot that many students are attending Grace Hopper this week and will not be in class today to ask questions or have time to work on the project. So, October 8 is the day.

Lectures Updated

I’ve added lectures up through September 24 (today) to the Blackboard site.

Project 1 Posted

Project 1 is now available. I have not assigned a due date yet as we need to talk about type checking. However, you should be able to complete the first exercise after Thursday’s lecture.

No Office Hours Sep 22

As mentioned in class last week I am running an online conference this week. While I will be teaching my classes as normal, I have a conflict with office hours today, 22 September. No projects due, so hopefully this will not prove to be a problem.

Int vs AE

I am seeing an issue with Project 0 dealing with Int vs AE in constructors. Specifically, (Plus l r) and (Minus l r). Both constructors take two arguments of type AE not of type Int. Therefore, the test case:

evalAE (Plus 1 2)

will not typecheck. You must use arguments of type AE with Plus, not arguments of type Int. To correct this use:

evalAE (Plus (Num 1) (Num 2))

The same problem is occuring in code snippets that I see. Make sure you don’t try to use Int where you should be using AE.

Project 0 Testing

I’ve gotten a couple of questions via email about testing Project 0. There are all kinds of ways to do your testing and when I grade projects I will look first at your tests. If your tests are sufficient, I’m done. If not, I have a collection of tests that I will use. Note that your grade will not be lowered if your tests are not sufficient. You’re program will just be subjected to my tests.

A couple of things I would suggest trying. One is to define a main in your code and call your test cases from the main program. Have a few test cases for each interpreter or even the same test cases for each interpreter other than the 4th where you need to integrate the parser. Another approach is to just include test cases at the bottom of your file that execute when the file is loaded. This is quite simple to do by just calling your interpreters directly. Finally, an approach I like is defined your test cases as a list of terms. Them map your interpreters across the list. The resulting list will record the output of your tests.

If you want to use QuickCheck, have right at it. There are chapters in the online text that describe how to use QuickCheck. I’m not covering that information in class and you are not responsible for it, but there’s likely enough there to allow you to use QuickCheck. Interestingly, both QuickCheck and Parsec (parser tool) are monadic. They don’t use Maybe, but do implement the Monad typeclass.


I believe recordings of lectures are now available on the course Blackboard site. You will be able to access them on a content page called Lectures. The system for posting lectures seems to have changed from last semester, but I believe I got it right. There is one lecture missing that did not record properly. Sorry about that.

Website Issues

If you have visited the book/notes pages for class you have undoubtedly discovered that math equations are not rendering properly. This started yesterday when I pushed changes to correct one single unbalanced parenthesis. My brain will not allow unbalanced parenthesis go remain unbalanced. As they say, no good deed goes unpunished.

What I have learned since then is GitHub updated the version of Kramdown they use to render pages. I use GitHub Pages for all my websites and highly recommend it. Until now. This new version handles Mathjax differently than the previous version. In English, they broke their rendering system for everyone who embeds equations.

I am working on a fix. If solutions I’ve seen posted actually work we should have properly rendered pages soon. That is a big if. Please bear with me as I debug this issue and watch for updates.

Found It!

I’ve found a fix for my website issues. I’ve fixed the page you will need for Project 0 completely, but other pages will rewquire manual work. Bear with me as I get those edits made. I guess the one good thing in all this is the math seems to look a bit better than it did.

Finally Fixed

The book website should be fixed. Hopefully this will be my last deep dive into Javascript, Jekyll, MathJax, GitHub Pages, and Kramdown for awhile. All because of on parenthesis and my compulsion to never leave parens hanging.

Project 0 Due Date

I just formally updated the due date for Project 0 to September 15th. It is not due on the 8th!

Office Hours zoom meeting

I had planned to use the same zoom meeting for both office hours and class. However, folks are joining the zoom meeting for early and accidentally ending up in office hours. So, I’ve created a new zoom meeting for office hours. The link can be found on the blackboard site for both class sections.

Project 0

Project 0 is now available if you want to get started. I provided a template file that sets GHC options, defines the AE data type, and defines signatures for each function required for the project. Hopefully this will help you get started. Due date is currently September 8, but that may change as I see how class progresses.

Please note that a parser from concrete syntax to abstract syntax is required only for Exercise 4 and I provided the parser in the template file for you. Also note that numbers in this parser are naturals and should never be negative. This means you will need to do some kind of error checking to catch problems.

We’ll talk about testing later, but if you are brave there is a QuickCheck implementation for part of this language in the examples associated with the text. I do not expect you to use QuickCheck, but I will use it for grading.

Exam Info Posted

I just posted information about the exam including a topic list to guide your preparation. The exam will be available from 1:30 on Thursday the 15th until 1:30 on Friday the 16th. Once you start the exam you will have 75 minutes to complete it. I will be available on zoom from 2:30-3:45 (normal class time). At 2:30 I will explain the exam and answer any questions you might have. I’ll stay online until 3:45.

We will review for the exam in class on October 13. I will go through the topics list and answer any questions you have. Please bring your questions to class. If there are no questions the review will be short!


Welcome to the website for EECS 662 - Programming Languages at the University of Kansas. Contents of this blog are available via an Atom feed that can be viewed using any RSS reader. Use this url. Please check here frequently for breaking news and information about projects and exams.

This site is hosted on GitHub and constructed using GitHub Pages, Jekyll and Liquid Tags.

Language Extension

The language extension to use GADTs in the most recent versions of GHC is:


Include this pragma at the top of your source files and the GADT notation I use in class will be available.

GADT Notation

In my notes and in class I have been using the GADT notation when defining data types. I do this because it closely resembles other languages that I use and we will most likely use GADTs later in the semester.

If you prefer the traditional notation that you learned in 368, you are more than welcome to us it. For early projects, there is no read advantage to using the GADT notation.