Functors and applicative functors
The idea of a functor is a functional representation of a piece of simple data. A functor version of the number 3.14 is a function of zero arguments that returns this value. Consider the following example:
pi= lambda : 3.14
We created a zero-argument lambda
object that has a simple value.
When we apply a curried function to a functor, we're creating a new curried functor. This generalizes the idea of "apply a function to an argument to get value" by using functions to represent the arguments, the values, and the functions themselves.
Once everything in our program is a function, then all processing is simply a variation on the theme of functional composition. The arguments and results of curried functions can be functors. At some point, we'll apply a getValue()
method to a functor
object to get a Python-friendly, simple type that we can use in uncurried code.
Since all we've done is functional composition, no calculation needs to be done until we actually demand...