阅读Previous SO Question我很困惑地发现Eric Lippert说不能在 C# 中为所有 Monad 定义接口,使用如下实现:
typeInterface Monad<MonadType<A>>
{
static MonadType<A> Return(A a);
static MonadType<B> Bind<B>(MonadType<A> x, Func<A, MonadType<B>> f);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是问题中列出的所有问题似乎都有简单的解决方案:
Monad 是一种模式,允许对包装类型的操作进行链接 为所有 Monad 定义一个 C# 接口似乎很容易,允许我们为所有 monad 编写一个通用类 问题出在哪里?
using System;
using System.Linq;
public class Program
{
public static void Main()
{//it works, where's the problem?
new SequenceMonad<int>(5)
.Bind(x => new SequenceMonad<float>(x + 7F))
.Bind(x => new SequenceMonad<double>(x + 5D))
;
}
interface IMonad<T>{
IMonad<T> Wrap(T a); …Run Code Online (Sandbox Code Playgroud)