Provides C# with discriminated unions