A Discriminated Union library for C#