CM50262: Functional programming
[Page last updated: 18 August 2023]
Academic Year:  2023/24 
Owning Department/School:  Department of Computer Science 
Credits:  6 [equivalent to 12 CATS credits] 
Notional Study Hours:  120 
Level:  Masters UG & PG (FHEQ level 7) 
Period: 

Assessment Summary:  CW 25%, EXCB 75% 
Assessment Detail: 

Supplementary Assessment: 

Requisites:  Before taking this module you must take CM50258 OR take CM50109 OR take another programming module 
Learning Outcomes: 
On completion of this unit, students will be able to:
1. Define and explain the syntax and semantics of the lambdacalculus, and its role as a model of computation. 2. Demonstrate the difference between reduction orders and explain their relationship with callbyname, callbyvalue and callbyneed evaluation. 3. Define and explain the simplytyped lambda calculus, HindleyMilner polymorphism, and type inference. 4. Write programs over structured datatypes in a typed higherorder functional programming language. 5. Formally reason about and proof properties of functional programs using the formalism of the typed lambdacalculus. 
Aims:  To illustrate how the logical and semantic foundations of programming languages are translated into usable programming languages. To give students practical experience of using a functional programming language. 
Skills:  Use of IT (T/F,A), Problem Solving (T/F,A) 
Content:  The lambda calculus, syntax and semantics; free and bound variables; alpha conversion; beta and eta reduction. Normal form subject to a reduction scheme. Reduction order: normal and applicative; Y combinator. Programming in the lambdacalculus: Church numerals and operations (addition, subtraction, multiplication), Booleans, recursion via fixed points. The diamond property. ChurchRosser theorem.
Typed lambda calculus. HindleyMilner polymorphism and type checking and type inference. Programming in a typed higherorder functional programming language (e.g. Haskell.) Types and type constructors: product, sum and function types. Recursive types, especially lists. Programming with map and fold. Callbyname, callbyvalue and callbyneed; graph reduction. Relationship of functional programming to other programming styles; integration of effects in functional programming languages. 
Course availability: 
CM50262 is Compulsory on the following courses:Department of Computer Science

Notes:
