您是否看到了一种方法来指定我的结果类型必须 MonadType< arg类型> 在此界面中?
interface IMonad<MonadType> // where MonadType : GenricType<>
{
MonadType<T1> unit<T1>(T1 t)
Func<MonadType<T1>, MonadType<T2>> map<T1, T2>(Func<T1, T2> f);
}
我得到一个错误: 类型参数'MonadType'不能与类型参数一起使用
答案 0 :(得分:0)
不,你不能用.NET泛型做到这一点。您要做的是指定MonadType
类型参数本身必须具有一个通用参数; .NET类型系统不能代表该约束。
这是伪造C#中通用monad的一种方法:http://sandersn.com/blog//index.php/2010/04/23/faking-type-classes-in-c