@Keith - The reason for doing the unevaluated function indirection in difference lists is that `(reduce append lol)` takes \\(\mathcal{O}(n^2)\\) time. Joel Spolsky dubbed this *Shlemiel the painter’s algorithm* in [*Back to the Basics* (2001)](https://www.joelonsoftware.com/2001/12/11/back-to-basics/).

It's a minor optimization - Jeff Atwood wrote a reply of sorts to Joel in [*The Sad Tragedy of Micro-Optimization Theater* (2009)](https://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/) where he observed for real world applications worrying about difference lists never matters. Despite Jeff's protests, however, I feel like this sort of thing is still fodder for Google interviews.