Assignments + Final Project

Assignments

Final Project

Project proposal (due Tuesday April 12th, before class)

This is the first step of your final project. Your job is to come up with a project proposal, a sketch of what you plan to do for the final project. The project itself will be due at the end of the semester, but this proposal will allow you to get feedback about your plans before you get started.

Proposal steps:

The topic of your project should be something that you are interested in! And fun! Perhaps you would like to go deeper into one of the topics that we have covered in this course. Perhaps there is different topic that you have studied in a different course and that you would like to try out in Haskell.

Note that your project must have some sort of design element to it: whether it is designing a library, or an embedded language, or a new type class, or an application. Projects that are merely porting an assignment from another course to Haskell are rarely successful.

When choosing your application domain, browse this state of the Haskell ecosystem. You should choose a topic where Haskell excels (i.e. marked “Best in Class” or “Mature”). Topics in other domains could lead to frustration and do not give you an opportunity to demonstrate what you have learned this semester. Read the description of “Immature” application domains carefully; some may work for your project, but others may be completely unsuitable. Your project must also connect to the topics that we are covering in class. You can write C-like code in Haskell, using the IO monad and imperative arrays, but we don’t want to see that.

You should do some research on Stackage to see what libraries are already available and easy for you to use. However, you can use any library that works with GHC 8.10.4, even if it is not distributed with Stackage. If there is already code to do what you want to do, don’t despair. It is fine to extend, redesign, rethink, or even redo from scratch an existing library. The only caveat is that you acknowledge all outside code and respect their license agreements.

If you are stumped, I and the TAs can give suggestions. Stick around after class, or if that is not convenient, send email to schedule a time.

This proposal is worth 5 points of your final project grade.

Project Rubric

Correctness

Design

Testing

Other considerations may affect the final score of the project. These include:

Project Presentation

Format

Schedule

Thursday, May 5th (extra credit!)

Tuesday, May 10th

Project Ideas

Here is an example project idea to get you started:

List Comprehensions

You can implement a language of list comprehensions, a subset of those in Haskell. List expressions should contain at least variables, tuples, lists, integer and boolean constants, and some arithmetic and boolean operations. List iterables should at least include some kind of range, variables, and guard in the form of equality/inequality checks.

Your goal would be to write:

Funge!

You can implement the esoteric programming language Befunge (that the instructor is for some reason a fan of). This project would involve:

The main design component of this project is in creating a high level language that is easy enough to program in (e.g. try solving a couple of Google Code Jam qualifying round problems in it), while still making it easy to compile down to the Funge!