DiscriminatedUnion.CS
0.0.1-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.1-alpha
NuGet\Install-Package DiscriminatedUnion.CS -Version 0.0.1-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.1-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.1-alpha
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: DiscriminatedUnion.CS, 0.0.1-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.1-alpha&prerelease // Install DiscriminatedUnion.CS as a Cake Tool #tool nuget:?package=DiscriminatedUnion.CS&version=0.0.1-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
{
public Success(double value)
{
Value = value;
}
public double 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.
Every implementation of IUnionWith<>
interface adds a type to union.
public abstract partial class Result : IUnionWith<Success>, IUnionWith<Error> { }
Use the union type
public class Program
{
public static void Main(string[] args)
{
var result = GetRoot(-1);
var outputMessage = result switch
{
Result.Success 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.Create(Math.Sqrt(value))
};
}
}
Limitations
- Generic types not supported
- Generic method mot 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.1)
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 |