Towards the end of the nineteenth century, Frege gave us the abstraction principles and the general notion of functions. Self-application of functions was at the heart of Russell's paradox. This led Russell to introduce type theory in order to avoid the paradox. Since, the twentieth century has seen an amazing number of theories concerned with types and functions and many applications. Progress in computer science also meant more and more emphasis...