Programming languages are the medium through which we describe computations. More specifically, we use the model provided by a programming language to discuss concepts, formulate algorithms, and reason about problem solutions. Programming languages define models tailored to thinking about and solving problems in intended application areas. For example, the C language provides a model close to a computer’s underlying hardware […]. The languages used in practice change continuously as advances in our field and the broadening uses of technology change how we model and express computation. At its core, the study of programming languages examines the principles and limitations of computing (or programming) models, the effective design and use of systems or languages based on these models, and methods to compare their relative strengths and weaknesses in particular contexts.1
The course Principles of Programming Languages (COMP3610) is an introduction to the theory and design of programming languages. To add a practical aspect to COMP3610, the project aims at the development of Haskell2 libraries that can be used to illustrate concepts of the course.
The implementations could follow an ML implementation by the University of Cambridge3 , and should be easily usable on all platforms. The developed software shoudl be modular in the sense that students can use them for exercises.
Haskell, interest in educational techniques a plus (but no must).
Why Undergraduates Should Learn the Principles of Programming Languages, ACM SIGPLAN Education Board, February 6, 2011 ↩
Implementations at www.cl.cam.ac.uk/teaching/2021/Semantics/materials.html ↩