DiscriminatedUnion.CS
0.0.2-alpha
This is a prerelease version of DiscriminatedUnion.CS.
There is a newer prerelease version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package DiscriminatedUnion.CS --version 0.0.2-alpha
NuGet\Install-Package DiscriminatedUnion.CS -Version 0.0.2-alpha
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DiscriminatedUnion.CS" Version="0.0.2-alpha" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DiscriminatedUnion.CS --version 0.0.2-alpha
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: DiscriminatedUnion.CS, 0.0.2-alpha"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DiscriminatedUnion.CS as a Cake Addin #addin nuget:?package=DiscriminatedUnion.CS&version=0.0.2-alpha&prerelease // Install DiscriminatedUnion.CS as a Cake Tool #tool nuget:?package=DiscriminatedUnion.CS&version=0.0.2-alpha&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Discriminated Union
A library that provides functionality to define a Discriminated Union in C#.
Define some types
public class Success<T>
{
public Success(T value)
{
Value = value;
}
public T Value { get; }
}
public class Error
{
public Error(string message)
{
Message = message;
}
public string Message { get; }
}
Define union type
Union type must be an abstract, partial class and have to be marked with [GeneratedDiscriminatedUnion]
attribute.
Every discriminator type must implement IDiscriminator<T>
interface.
Where T
is the type that constraints a discriminator.
[GeneratedDiscriminatedUnion]
public abstract partial class Result
{
public partial class Success<T> : IDiscriminator<Sample.Success<T>> { }
public partial class Error : IDiscriminator<Sample.Error> { }
}
Use the union type
public class Program
{
public static void Main(string[] args)
{
var result = GetRoot(-1);
var outputMessage = result switch
{
Result.Success<double> s => s.Value.ToString(CultureInfo.InvariantCulture),
Result.Error e => e.Message,
};
Console.WriteLine(outputMessage);
}
public static Result GetRoot(double value)
{
return value switch
{
< 0 => Result.Error.Create("Value cannot be less than zero"),
_ => Result.Success<double>.Create(Math.Sqrt(value))
};
}
}
Limitations
- Generic method not supported
- Union one type multiple times not supported
- T.b.a
There are no supported framework assets in this package.
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- DiscriminatedUnion.CS.Annotations (>= 0.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.0.8-alpha | 145 | 4/22/2022 |
0.0.7-alpha | 130 | 4/21/2022 |
0.0.6-alpha | 134 | 4/19/2022 |
0.0.5-alpha | 153 | 4/19/2022 |
0.0.4-alpha | 124 | 4/18/2022 |
0.0.3-alpha | 118 | 4/17/2022 |
0.0.2-alpha | 141 | 3/2/2022 |
0.0.1-alpha | 129 | 2/28/2022 |