Solution (source code)

= Solution

Compose the three <functions>:

``
reverse :: [a] -> [a]
reverse = abs . rev . rep
``

The representation built by `rep` has $2n+1$ constructors. `rev` preserves that count, and `abs` traverses it once. Their three linear bounds add to \b[$\Theta(n+1)$ total time], improving the direct quadratic reversal. The correctness equations for representation, reversal and abstraction compose to the required reversed <list>.