Short Description
This unit looks at programming from the perspective of functions. Students will be introduced to the lambda calculus, a mathematical theory developed in the 1930s, which uses functions as its main basis. Students will also discover how functions can be used as the main component within programming by developing programs using Haskell, a functional programming language. Students will explore how functional programming can create complex structures to work efficiently and robustly with minimal side effects and how recursion can be central to creating such effective code.
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 prove properties of functional programs using the formalism of the typed lambda-calculus