csharp Monad C#的例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp Monad C#的例子相关的知识,希望对你有一定的参考价值。

typeclassinstance Monad<Nullable> {
    Nullable<b> >>=<a,b>(Nullable<a> val, Func<a, Nullable<b>> f) {
        if (val.HasValue) {
            return f(val.Value);
        } else {
            return null;
        }
    }

    Nullable<a> return_<a>(a val) {
        return new Nullable<a>(val);
    }

    Nullable<b> >><a,b>(Nullable<a> wrappedA, Nullable<b> wrappedB) {
        return >>=(wrappedA, (a unwrappedA) => wrappedB);
    }
}

typeclassinstance Monad<List> {
    List<b> >>=<a,b>(List<a> lst, Func<a, List<b>> f) {
        List<b> output = new List<b>();
        foreach (a val in lst) {
            // f(val) will return a list, so we concatenate the result
            // of f(val) onto the end of the output list
            output.AddRange(f(val));
        }

        return output;
    }

    List<a> return_<a>(a val) {
        return new List<b>() { val };
    }

    List<b> >><a,b>(List<a> wrappedA, List<b> wrappedB) {
        return >>=(wrappedA, (a unwrappedA) => wrappedB);
    }
}

以上是关于csharp Monad C#的例子的主要内容,如果未能解决你的问题,请参考以下文章

csharp C#中的免费Monad实现(CSharp)

csharp Monad扩展

monad 的例子在哪里? [复制]

Not a Functor/Functor/Applicative/Monad 的好例子?

详解函数式编程之Monad

Monad的重点