## Part II projects & ideas

I am happy to supervise Part II projects which are related to my research interests, general software engineering, or my personal interests (games, education, food/cooking, and aviation). While I would encourage you to come up with your own idea, this page contains some suggestions for projects below.

If you are interested in doing a project with me, feel free to send me an email to arrange an informal chat about one of the projects on this page, variations of them, or your own ideas.

### Adding type classes to low-level languages

Types classes are almost unique to Haskell, but other languages with parameteric polymorphism can also profit from them. The goal of this project is to extend a language such as C or C++ with type classes. This would probably involve constructing a compiler for a subset of the language with the new extensions.

### Programming languages for fuzzy logic

In classical set theory, values either belong to a set or they don't. In fuzzy logic, values belong to sets to some degree. For example, if x is an element of A to a degree of 0.1 and an element of B to a degree of 0.9, it belongs to A a little bit and to B a lot. The goal of this project would be to create a domain-specific language (DSL) for programming with fuzzy logic. This could either be done as an embedded DSL in a language such as Haskell or as a brand new language. Some interesting questions which may need to be addressed involve: how to type such a language, how to specify rules and membership functions, and how to implement operators.

### A proof assistant for children

Computer Science education is becoming increasingly more important in today's world and many projects, such as Scratch, aim to make this more accessible to children. The aim of this project would be to develop a (graphical) proof assistant that can be used by students below undergraduate level to learn formal reasoning.