Blogged: discriminated-unions-in-csharp.