Kinet is a library for C# that provides useful data structures and algorithms for general purpose programming. It is somewhat inspired by the Functional Java project and the Haskell programming language.
Compilable Usage Examples
Snippets
The List monad using LINQ
var a = List<int>.list(1, 3, 5, 5, 100, 671392);
var b = from i in a select i * 10;
var c = from i in a
from j in List<string>.list("a", "b", "c")
select Tuple2<int, string>.tuple2(i, j);
var d = from i in c
where i.a > 10 || i.b == "b"
select i;
var si = Show<int>.AnyShow();
var se = si.IEnumerableShow;
var ste = si.Tuple2Show<string>(Show<string>.AnyShow()).IEnumerableShow;
/*
[1,3,5,5,100,671392]
[10,30,50,50,1000,6713920]
[(1,a),(1,b),(1,c),(3,a),(3,b),(3,c),(5,a),(5,b),(5,c),(5,a),(5,b),(5,c),(100,a),(100,b),(100,c),(671392,a),(671392,b),(671392,c)]
[(1,b),(3,b),(5,b),(5,b),(100,a),(100,b),(100,c),(671392,a),(671392,b),(671392,c)]
*/
se.Println(a);
se.Println(b);
ste.Println(c);
ste.Println(d);The Func monad using LINQ
Func<int, bool> t = n => n > 10;
Func<int, string> u = n => (n - 1).ToString();
Func<int, string> v = n => (n * 5).ToString();
var a = from tt in t
from uu in u
from vv in v
select tt ? uu : vv;
var b = from k in List<int>.list(9, 10, 11, 5, 20)
select a(k);
var s = Show<string>.AnyShow().IEnumerableShow;
// [45,50,10,25,19]
s.Println(b);