= Solution
The base value can have any type `a`. The recursive result has that same type, so the step must accept and return `a`. Thus the most general <polymorphic> <type signature> of the <natural-number fold> is
``
foldNat :: (a -> a) -> a -> Natural -> a
``
In mathematical type notation, $\boxed{(\alpha\to\alpha)\to\alpha\to\mathrm{Natural}\to\alpha}$. No equality, ordering or numeric constraint is needed: the <natural-number fold> manipulates constructors, rather than performing arithmetic on the result.
Back to article page