Short Description

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