StoneKit.Core.Structs.Maybe
2024.1.1.391401
dotnet add package StoneKit.Core.Structs.Maybe --version 2024.1.1.391401
NuGet\Install-Package StoneKit.Core.Structs.Maybe -Version 2024.1.1.391401
<PackageReference Include="StoneKit.Core.Structs.Maybe" Version="2024.1.1.391401" />
paket add StoneKit.Core.Structs.Maybe --version 2024.1.1.391401
#r "nuget: StoneKit.Core.Structs.Maybe, 2024.1.1.391401"
// Install StoneKit.Core.Structs.Maybe as a Cake Addin #addin nuget:?package=StoneKit.Core.Structs.Maybe&version=2024.1.1.391401 // Install StoneKit.Core.Structs.Maybe as a Cake Tool #tool nuget:?package=StoneKit.Core.Structs.Maybe&version=2024.1.1.391401
Maybe Monad for C#
Overview
The Maybe monad is a generic struct designed to represent optional values in C# following the Option Monad design pattern. It allows you to work with values that might be absent, helping to write more expressive and concise code.
This library includes extension methods for additional operations and functionalities which makes it unique by keeping the struct size as small as possible.
It has small memory footprints and performs much faster that other available implementations.
For a comprehensive understanding of the Maybe Monad, you can refer to the Pluralsight tech blog and Wikipedia on Monad (functional programming).
Installation
You can install by using NuGet:
PM> Install-Package StoneKit.Core.Strcuts.Maybe
Usage
var maybeWithValue = new Maybe<int>(42);
var maybeEmpty = Maybe<int>.Empty;
var toMaybe = 10.ToMaybe();
var maybe = Maybe<int>.Empty
.Or(10)
.Where(x => x > 5)
.Perform(x=> Console.WriteLine($"{x} is greater than 5."))
.Match(
value => value < 50,
value => Console.WriteLine($"{value} is smaller than 50.")
)
.Where(x=> x >100)
.PerformOnEmpty(() => Console.WriteLine("Performing action on empty Maybe"))
.Or(100)
.Finally(x=> Console.WriteLine("I'm done!"));
Extensions
Perform
Performs an action on the value if the Maybe monad has a value.
PerformOnEmpty
Performs an action when the Maybe monad is empty.
Finally
Performs an action on the value regardless of whether the Maybe monad has a value.
Or
Returns the original Maybe monad if it has a value; otherwise, returns a new Maybe monad with the specified default value.
Map
Maps the Maybe monad from one type to another using a provided function.
MapOnEmpty
Maps the Maybe monad to another type when it is empty, using a provided function.
SelectMany
Selects and projects the value of the Maybe monad using provided functions.
Where
Filters the Maybe monad based on a predicate.
ToMaybe
Converts an object to a Maybe monad.
ToType
Converts an object to a Maybe monad of a specific type.
Contributing
If you find any issues or have suggestions for improvements, feel free to open an issue or create a pull request.
License
This Maybe Monad library is licensed under the MIT License.
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. |
-
net8.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on StoneKit.Core.Structs.Maybe:
Package | Downloads |
---|---|
StoneKit.Core.Reflection
A reflection utility containing handy extension methods and a utility for emitting IL (Intermediate Language) code using the ILGenerator. |
|
StoneKit.TransverseMapper
Transverse - Fastest and quickest object mapper for dotnet |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2024.1.1.391401 | 80 | 10/5/2024 |
2024.1.1.305385 | 98 | 8/5/2024 |
2024.1.1.268769 | 85 | 7/9/2024 |
2024.1.1.261674 | 93 | 7/4/2024 |
2024.1.1.261665 | 84 | 7/4/2024 |
2024.1.1.261630 | 83 | 7/4/2024 |
2024.1.1.260673 | 124 | 7/3/2024 |
2024.1.1.260489 | 101 | 7/3/2024 |
2024.1.1.260485 | 96 | 7/3/2024 |
1.24.703.180756 | 237 | 7/3/2024 |
1.24.703.164604 | 238 | 7/3/2024 |
1.24.703.121207 | 484 | 7/3/2024 |
1.24.626.192706 | 91 | 6/26/2024 |
1.24.612.859 | 93 | 6/11/2024 |
1.24.611.233127 | 114 | 6/11/2024 |
1.24.611.232750 | 95 | 6/11/2024 |
1.24.603.121931 | 58 | 6/3/2024 |
1.24.317.170729 | 113 | 3/17/2024 |
1.24.317.170542 | 101 | 3/17/2024 |
1.24.317.164648 | 108 | 3/17/2024 |
1.24.317.161355 | 112 | 3/17/2024 |
1.24.121.184215 | 106 | 1/21/2024 |
1.24.121.182728 | 103 | 1/21/2024 |
1.23.1205.143419 | 173 | 12/5/2023 |
1.23.1205.132044 | 132 | 12/5/2023 |
1.23.1205.121843 | 128 | 12/5/2023 |
1.23.1205.121044 | 124 | 12/5/2023 |
1.23.1204.161651 | 117 | 12/4/2023 |
1.23.1204.155354 | 131 | 12/4/2023 |
1.23.1204.145217 | 132 | 12/4/2023 |
1.23.1201.144010 | 132 | 12/1/2023 |
1.23.1201.140752 | 114 | 12/1/2023 |
1.23.1201.135108 | 98 | 12/1/2023 |
1.23.1201.134244 | 109 | 12/1/2023 |
1.23.1201.105427 | 124 | 12/1/2023 |
1.23.1201.104343 | 130 | 12/1/2023 |
1.0.3 | 132 | 11/30/2023 |
1.0.2 | 115 | 11/30/2023 |
1.0.1 | 1,829 | 11/30/2023 |