使用自由绑定泛型类型作为类型参数
问题描述:
您是否看到一种方法来指定我的结果类型必须是MonadType <参数类型>在此接口内?使用自由绑定泛型类型作为类型参数
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”不能与类型参数
答
没有被使用,则不能使用.NET泛型做到这一点。你想要做的是指定MonadType
类型参数本身必须有一个通用参数; .NET类型系统不能表示该约束。
下面是在C#中伪造泛型monads的一种方法:http://sandersn.com/blog//index.php/2010/04/23/faking-type-classes-in-c