Functional programming languages make heavy use of recursive functions.
When we define a recursive function, we are asking the compiler to compute a fixed point. However, the language is actually powerful enough for us to define a fixed point combinator and thus compute the fixed point ourselves.
Dismantling the definition of recursive functions in this way is, I hope, both fun and illustrative as it offers some interesting possibilities.
By separating the function definition from the fixed point computation, it is possible to insert a stage of modifications in between the two, altering the produced function in surprising ways.
Some optimisations, for instance, can be added in this stage, thus not cluttering the function definition itself. This allows code which is both clear and fast.
Bring your laptop and look forward to destructing your favourite recursive functions.