| ▲ | louthy 2 days ago | ||||||||||||||||||||||||||||||||||
This is all very basic, instead you can use C#'s new static interface methods feature to create higher-kinded traits where you can properly generalise over a monad trait (or applicatives, functors, foldables, etc.), which is what I do in language-ext [0]. I'm not saying that implementing SelectMany for specific data-types isn't valuable. It certainly ends up with more elegant and maintainable code, but the true power of monads and other pure-FP patterns opens up when you can fully generalise. * I have a blog series on it that covers implementing Semigroups, Monoids, Functors, Foldables, Traversables, Applicatives, Monads, and Monad Transformers (in C#) [1] * The monad episode (my 'Yet Another Monad Tutorial') [2] * An entire app generalised over any monad where the monad must support specific traits [3]. It's the program I use to send out the newsletters from my blog. Happy to answer any questions on it. [0] https://github.com/louthy/language-ext/ [1] https://paullouth.com/higher-kinds-in-c-with-language-ext/ [2] https://paullouth.com/higher-kinds-in-csharp-with-language-e... [3] https://github.com/louthy/language-ext/tree/main/Samples/New... | |||||||||||||||||||||||||||||||||||
| ▲ | FrustratedMonky 2 days ago | parent [-] | ||||||||||||||||||||||||||||||||||
Serious question, at this point, have all F# features been fully incorporated into C#? | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||