Defunctionalization and Freyd’s Theorem
The main idea of functional programming is to treat functions like any other data types. In particular, we want to be able to pass functions as arguments to other functions, return them as values, and store them in data structures. But what kind of data type is a function?
Source: Defunctionalization and Freyd’s Theorem, an article by Bartosz Milewski.