小编ano*_*ous的帖子

这里是 C# Monad,问题出在哪里?

阅读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)

c# generics monads interface

5
推荐指数
1
解决办法
753
查看次数

标签 统计

c# ×1

generics ×1

interface ×1

monads ×1