domn1995 / dunet C# 890 30 C# discriminated union source generator csharp discriminated-unions dotnet functional-programming