The "A recipe for a functional app" series

"I think I understand functional programming at the micro level, and I have written toy programs, but how do I actually go about writing a complete application, with real data, real error handling, and so on?"

This is a very common question, so I thought that in this series of posts I'd describe a recipe for doing exactly this, covering design, validation, error handling, persistence, dependency management, code organization, and so on.

A recipe for a functional app, part 1
A recipe for a functional app, part 2
A recipe for a functional app, Part 3