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