Type constructor plus lifting function (fmap)
If you convert a recursive function to fixed-point with a Y-combinator, you can then add memoization to the combinator.
At it’s core, the lambda calculus contains only: variable references, single-argument anonymous functions and function calls.