domn1995 /dunetC#88930C# discriminated union source generatorcsharpdiscriminated-unionsdotnetfunctional-programming