DarkPeak.Functional
1.16.4
dotnet add package DarkPeak.Functional --version 1.16.4
NuGet\Install-Package DarkPeak.Functional -Version 1.16.4
<PackageReference Include="DarkPeak.Functional" Version="1.16.4" />
<PackageVersion Include="DarkPeak.Functional" Version="1.16.4" />
<PackageReference Include="DarkPeak.Functional" />
paket add DarkPeak.Functional --version 1.16.4
#r "nuget: DarkPeak.Functional, 1.16.4"
#:package DarkPeak.Functional@1.16.4
#addin nuget:?package=DarkPeak.Functional&version=1.16.4
#tool nuget:?package=DarkPeak.Functional&version=1.16.4
DarkPeak.Functional
A functional programming library for .NET providing monadic types and railway-oriented programming patterns.
Packages
Core types support exhaustive Match, LINQ query syntax where appropriate, and async APIs across the library.
Example
using DarkPeak.Functional;
using DarkPeak.Functional.Extensions;
// Cache successful fetches for 5 minutes — failures are never cached
var fetchUser = MemoizeResult.FuncAsync<int, User, Error>(
id => httpClient.GetResultAsync<User>($"/users/{id}"),
opts => opts.WithExpiration(TimeSpan.FromMinutes(5)));
var fetchOrder = MemoizeResult.FuncAsync<int, Order, Error>(
id => httpClient.GetResultAsync<Order>($"/orders/{id}"),
opts => opts.WithExpiration(TimeSpan.FromMinutes(5)));
// Run both fetches concurrently, then chain the result
var summary = await fetchUser(42)
.Join(fetchOrder(7)) // concurrent via Task.WhenAll
.Map((user, order) => new Summary(user.Name, order.Total))
.Tap(s => logger.LogInformation("Built summary for {Name}", s.Name))
.TapError(err => logger.LogError("Failed: {Msg}", err.Message));
Core Types
Option<T>— explicit presence or absence instead ofnullResult<T, TError>— success/failure flows with typed errorsEither<TLeft, TRight>— two equally valid branchesOneOf<T1, ..., Tn>— discriminated unions with 2-8 casesValidation<T, TError>— error accumulation instead of short-circuiting
See docs/articles/oneof.md for OneOf usage and Either interop helpers.
Building
dotnet build
dotnet test
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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. |
-
net10.0
- No dependencies.
NuGet packages (7)
Showing the top 5 NuGet packages that depend on DarkPeak.Functional:
| Package | Downloads |
|---|---|
|
DarkPeak.Functional.Http
Functional HTTP client extensions for .NET. Wraps HttpClient operations in Result<T, Error> for type-safe, exception-free HTTP communication using railway-oriented programming. |
|
|
DarkPeak.Functional.AspNet
ASP.NET integration for DarkPeak.Functional. Provides extensions to convert Result<T, Error> to IResult and ProblemDetails for idiomatic minimal API error handling. |
|
|
DarkPeak.Functional.Dapper
Functional Dapper extensions for DarkPeak.Functional. Wraps Dapper query and execute methods in Result types with typed database error mapping and functional transaction support. |
|
|
DarkPeak.Functional.Redis
Redis distributed cache provider for DarkPeak.Functional. Implements ICacheProvider using StackExchange.Redis for use with Memoize and MemoizeResult. |
|
|
DarkPeak.Functional.EntityFramework
Functional Entity Framework Core extensions for DarkPeak.Functional. Wraps DbContext query and save methods in Result types with typed error mapping and functional transaction support. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.16.4 | 186 | 3/14/2026 |
| 1.14.1 | 153 | 3/13/2026 |
| 1.13.1 | 151 | 2/15/2026 |
| 1.12.0 | 147 | 2/15/2026 |
| 1.10.1 | 154 | 2/15/2026 |
| 1.8.0 | 121 | 2/15/2026 |
| 1.7.0 | 134 | 2/15/2026 |
| 1.6.20-PullRequest11.3 | 44 | 2/14/2026 |
| 1.6.18 | 101 | 2/14/2026 |
| 1.6.17 | 99 | 2/14/2026 |
| 1.6.17-PullRequest10.0 | 45 | 2/14/2026 |
| 1.6.16-PullRequest9.0 | 49 | 2/14/2026 |
| 1.6.15 | 112 | 2/14/2026 |
| 1.6.15-PullRequest8.3 | 45 | 2/14/2026 |
| 1.6.14 | 107 | 2/14/2026 |
| 1.6.13 | 109 | 2/14/2026 |
| 1.6.12-PullRequest7.7 | 41 | 2/14/2026 |
| 1.6.12-PullRequest7.0 | 42 | 2/14/2026 |
| 1.6.10 | 112 | 2/14/2026 |
| 1.6.5-PullRequest1.0 | 46 | 2/14/2026 |