The "Annotated walkthroughs" series

One comment I hear often is a complaint about the gap between theory and practice in F# and functional programming in general. In other words, you know the theory, but how do you actually design and implement an application using FP principles?

So I thought it might be useful to show you how I personally would go about designing and implementing some little applications from beginning to end.

These will be sort of annotated live coding sessions. I'll take you through my thought process at each stage, including backtracking and refactoring.

The type-first approach to designing a Calculator
Testing the design with a trial implementation
Adding the services and user interface, and dealing with disaster
Designing using a state machine
A walkthrough of the design decisions in a purely functional implementation
In which I throw away the previous design, and switch to a capability-centric approach