如何在 C# 中创建类似 Monoid 的接口?

Xod*_*rap 5 c# functional-programming

我想要求实现接口(或从类派生)的东西包含一个实现Aggregate。也就是说,如果他们是 typeT我希望他们有 type 的东西Func<T,T,T>。在 Haskell 中,这被称为“幺半群”。

编辑:我想调用的是这样的:

list.Aggregate((x, accum) => accump.MAppend(x));
Run Code Online (Sandbox Code Playgroud)

根据 DigalD 的回答,这是我最好的尝试,但它无法编译:

interface IMonoid<T>
{
    T MAppend(T other);
}

class Test
{
    public static void runTest<T>(IEnumerable<IMonoid<T>> list)
    {
        // doesn't work
        list.Aggregate((x, ac) => ac.MAppend(x));
    }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*lap -1

难道你不应该让接口也变得通用吗?

interface IMonoid<T>
{
    public IMonoidHandler<T> handler {get;set;}
}
Run Code Online (Sandbox Code Playgroud)