Explore how the logical and semantic foundations of programming languages are translated into usable programming languages. You will gain practical experience of using a functional programming language.
You’ll learn to:
- Define and explain the syntax and semantics of the lambda calculus, and its role as a model of computation
- Demonstrate the difference between reduction orders and explain their relationship with call-by-name, call-by-value and call-by-need evaluation
- Define and explain the simply-typed lambda calculus, Hindley–Milner polymorphism, and type inference
- Write programs over structured datatypes in a typed higher-order functional programming language
- Formally reason about and proof properties of functional programs using the formalism of the typed lambda calculus