Language Workshop

Welcome to the language workshop! This is a series of worksheets that will walk you through implementing an interpreter for a programming language called MLTS. MLTS is a functional language, and you get to choose what features your implementation supports! We’ll walk you through implementing a parser, evaluator, REPL, and typechecker.

The steps are designed to be completed in order; if you’re stuck on one of the steps, ask someone for help in the workshop, or post a message on our Discord server.

You can choose which language to write the interpreter in; pick one that you’re comfortable with already, or if you want a further challenge, pick one that you want to learn!

The only prior knowledge we assume is that you know the basics of programming. If you’re not too confident with your programming skills, this can be a great way to develop them! In this case, we recommend that you use a language that you have the most experience in, and ask our workshop helpers if you’re unsure about anything :)

For further features to implement, refer to Types and Programming Languages by Benjamin Pierce.

In particular, you might want to look at:

  • Chapter 11: Simple Extensions
  • Chapter 14: Exceptions
  • Section III: Subtyping
  • Section IV: Recursive Types
  • Section V: Polymorphism
  • Section VI: Higher-Order Systems

If you have any ideas of other things we should cover, do get in touch with us on our Discord!