MonadCraft 0.15.0
dotnet add package MonadCraft --version 0.15.0
NuGet\Install-Package MonadCraft -Version 0.15.0
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="MonadCraft" Version="0.15.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MonadCraft" Version="0.15.0" />
<PackageReference Include="MonadCraft" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MonadCraft --version 0.15.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: MonadCraft, 0.15.0"
#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.
#:package MonadCraft@0.15.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MonadCraft&version=0.15.0
#tool nuget:?package=MonadCraft&version=0.15.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
MonadCraft
Lightweight Optional and Result types with async helpers, LINQ support, and single-assert test coverage.
Installation
dotnet add package MonadCraft
Quickstart
Optional
var maybeName = Optional.Some("Ada");
var greeting = maybeName
.Select(name => name.ToUpperInvariant())
.Where(name => name.StartsWith('A'))
.OrElse(Optional.None<string>())
.GetValueOrDefault("Guest");
var safeNumber = Optional.Try(() => int.Parse("12"));
Result
var parsed = Result.Try<string, int>(
() => int.Parse("42"),
ex => ex.Message);
var validated = await parsed
.EnsureAsync(value => Task.FromResult(value > 0), "must be positive")
.RecoverAsync(error => Task.FromResult(-1));
var projection =
from a in Result.Success<string, int>(2)
from b in Result.Success<string, int>(3)
select a + b; // 5
Key APIs
Optional<T>:Some,None,Try,Match/MatchAsync,Map/MapAsync,Bind/BindAsync,OnSome/OnNone(+ async),Where,OrElse,GetValueOrDefault,GetValueOrElse,ToEnumerable,ToResult.Result<TError, TValue>:Success,Failure,Try/TryAsync,Match/MatchAsync,Map/MapAsync,MapError/MapErrorAsync,Bind/BindAsync,Ensure/EnsureAsync,Recover/RecoverAsync,OnSuccess/OnFailure(+ async),Switch/SwitchAsyncoverloads,GetValueOrDefault,GetValueOrElse,ToOptional.- Async extensions:
OptionAsyncExtensionsandResultAsyncExtensionsmirror the sync APIs forTask<Optional<T>>andTask<Result<TError,TValue>>(includingOrElseAsync,EnsureAsync,RecoverAsync,ToOptionalAsync).
LINQ support
Both Optional<T> and Result<TError, TValue> implement Select/SelectMany so you can compose with query syntax.
var total =
from a in Optional.Some(1)
from b in Optional.Some(2)
select a + b; // Some(3)
var combined =
from a in Result.Success<string, int>(1)
from b in Result.Success<string, int>(2)
select a + b; // Success(3)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on MonadCraft:
| Package | Downloads |
|---|---|
|
RollCraft
A sophisticated library for creating dice expressions in .NET |
GitHub repositories
This package is not used by any popular GitHub repositories.