Designing with types: Making illegal states unrepresentable
fsharpforfunandprofit.com