In these lectures we introduce a notation and a calculus for specifying and manipulating computable functions over lists that can be implemented in a purely functional programming language.Expand

We show how to construct generalised folds for nested datatypes, and show that they possess a uniqueness property analogous to that of ordinary folds.Expand

De Bruijn notation is a coding of lambda terms in which each occurrence of a bound variable x is replaced by a natural number, indicating the ‘distance’ from the occurrence to the abstraction that introduced x.Expand

This paper describes a technique for transforming functional programs that repeatedly traverse a data structure into more efficient alternatives that do not.Expand