https://github.com/unosd/resultmonad
C# implementation of the result and other monads with query syntax support and extensions for Tasks and IEnumerable
https://github.com/unosd/resultmonad
async csharp functional functional-programming functor functors monad monads monoid monoids netcore2 netstandard result task tpl
Last synced: 16 days ago
JSON representation
C# implementation of the result and other monads with query syntax support and extensions for Tasks and IEnumerable
- Host: GitHub
- URL: https://github.com/unosd/resultmonad
- Owner: UnoSD
- License: gpl-2.0
- Created: 2018-08-19T10:53:35.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-08-19T14:18:29.000Z (almost 8 years ago)
- Last Synced: 2026-04-24T05:12:01.478Z (about 2 months ago)
- Topics: async, csharp, functional, functional-programming, functor, functors, monad, monads, monoid, monoids, netcore2, netstandard, result, task, tpl
- Language: C#
- Homepage:
- Size: 25.4 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Monad
C# implementation of the result and other monads with query syntax support and extensions for Tasks and IEnumerable
# NuGet
https://www.nuget.org/packages/Monad/1.0.0
# Task result monad
```csharp
var query =
from i in Task.FromResult("pippo".ToResult())
from p in (i + "peppe").ToResult()
select p;
var chain =
Task.FromResult("pippo".ToResult())
.SelectMany(i => (i + "peppe").ToResult());
Assert.That(query.Result(), Is.EqualTo(chain.Result()));
Assert.That(chain.Result(), Is.EqualTo("pippopeppe"));
```
# Enumerable result monad
```csharp
var query =
from i in new[] { "pippo" }.AsEnumerable().ToResult()
from p in (i + "peppe").ToResult()
select p;
var chain =
new[] { "pippo" }.AsEnumerable()
.ToResult()
.SelectMany(i => (i + "peppe").ToResult());
Assert.That(query.Result(), Is.EqualTo(chain.Result()));
Assert.That(chain.Result(), Is.EqualTo("pippopeppe"));
```
# Plain result monad
```csharp
var query =
from i in "pippo".ToResult()
from p in (i + "peppe").ToResult()
from q in (p + "peppa").ToResult()
from r in (q + "pippi").ToResult()
select r;
var chain =
"pippo".ToResult()
.SelectMany(i => (i + "peppe").ToResult())
.SelectMany(p => (p + "peppa").ToResult())
.SelectMany(q => (q + "pippi").ToResult());
Assert.That(query.Result(), Is.EqualTo(chain.Result()));
Assert.That(chain.Result(), Is.EqualTo("pippopeppepeppapippi"));
```