Project proposal
This is round one 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:
- Choose a partner
Like the last few homework assignments, you project should be done in pairs.
Having a partner for the project is required. With permission, a group of three people may work together.
- Choose a topic
The topic of your project should be something that you and your partner are interested in. Perhaps you would like to go deeper into one of the topics that we have covered in this course. Perhaps there is an algorithm or library or program that you have studied in a different course and that you would like to rewrite in Haskell.
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.
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 Hackage to see what libraries are already available for you to use. You can use any library that works with GHC 8.6.4. If there is already code on Hackage to do what you want to do, don't despair. It is fine to extend, redesign, rethink, or even redo from scratch any of the existing packages. The only caveat is that you acknowledge all outside code and respect their license agreements.
If you are stumped, I can give suggestions. Stick around after class, or if that is not convenient, send email to schedule a time.
Write a 2-3 page document following this template. You may edit this LaTeX file to generate your proposal.
Submit your document to gradescope. Make sure that you include your name, your githubid, your partner's name and your partner's githubid at the top of the file.
Past successful projects
- Fractal drawing program, including a DSL for L-Systems
- Number theory library, plus public-key cryptography application
- Theorem prover, using GADTs to represent proof systems
- Regular expression library (including NFA and DFA conversion)
- Chess game
- Dominion game
- DSL for music generation
- DSL for drum beats
- Treap implementation (using GADTs to enforce invariants)
- Simple stack-based programming language