Main project
Description and requirements
The goal of the main project is to develop an application or library using the concepts and techniques introduced in the lectures. More concretely, the project should:
- Be substantial: it should encompass several thousands lines of code;
- Tackle a real-world scenario, that is, it should have a useful application;
- Illustrate that you know how to apply concepts and techniques for the lectures;
- In particular, use strong types to develop a domain specific language to solve a particular problem;
- Showcase the best development practices that you have learned, include testing, profiling, and project management.
Deliverables
The project should be developed in teams of three people. The due dates can be found on the schedule.
Project proposal
The proposal is a 1 to 2-page document describing:
- The domain you will be working on.
- The problem or problems you library or application aims to solve.
- An estimated schedule for the project.
Status report
At the middle of the period you have to hand in a report (1 to 2 pages) describing the current status of your project:
- A concise description of the main data types and techniques you are using.
- Include a description of any libraries you are using.
- What you have achieved so far – a brief summary of what has been implemented.
- Please include a link to the repository containing the code.
- Timeline – are you still on track? How will you adapt your original timeline?
Presentation and final submission
Your final submission should contain the code and a small report (around 5 pages) outlining:
- A description of your domain and problem and how they translate to code.
- The most important concept and techniques used throughout the code.
- The results you have achieved, including examples of use of your library or application.
- Reflection about what went well or better than expected, and what problems you encountered.
Each team should prepare a small presentation (20 minutes, including questions) to describe the highlights of the project – both in terms of functionality and techniques – to the rest of the class.
Suggested topics
A few ideas for possible topics are included below – but this list is by no means exhaustive:
- A task-oriented programming framework in the lines of iTasks
- A library for describing spreadsheet calculations, and compute them
- A Submit-like system with a webserver (maybe using Servant) and a front-end (maybe using GHCJS)
- A library for chemistry in the lines of chemlab, but strongly-typed
- A library for data visualization and exploration
- An interface (bindings or generator) to Dear ImGui
- A library for numpy-style array operations, but strongly typed
- …