1. Knowledge of functional programming in a modern language supporting declarative functional programming.
2. Knowledge of the benefits and limitations of declarative functional programming
3. Knowledge of constructing clear arguments explaining and justifying the design of programs.
4. Knowledge of several interpreters illustrating principles of programming languages.
5. Team programming project illustrating principles of programming languages, with oral and written presentation.