这个签名是什么{零:α;附加:α - > β - > α; } 名称?

时间:2015-01-19 16:51:36

标签: c# naming builder monoids abstract-algebra

我有Monoid和Builder接口:

interface IMonoidFor<T>
{
    T Zero { get; }
    T Append(T a, T b);
}

interface IBuilderFor<T>
{
    IBuilderFor<T> Append(T value);
    T Result();
}

并希望实现从Monoid到Builder转换算法。我试图这样做,并创建了这样的东西:

class BuilderMakerFor<T>
{
    public IBuilderFor<T> MakeFrom(IMonoidFor<T> monoid)
    {
        return new Product(monoid);
    }

    class Product
        : IBuilderFor<T>
    {
        readonly IMonoidFor<T> _monoid;
        T _result;

        public Product(
            IMonoidFor<T> monoid)
        {
            _monoid = monoid;
            _result = _monoid.Zero;
        }

        public IBuilderFor<T> Append(T value)
        {
            _result = _monoid.Append(_result, value);
            return this;
        }

        public T Result()
        {
            return _result;
        }
    }
}

但是在实际任务中,我需要可以将项目累积到这些项目列表的构建器,以及其他具有相同累积原理的构建器。 My Builders必须实现下一个界面:

interface IBuilderFor<TSource, TResult>
{
    IBuilderFor<TSource, TResult> Append(TSource value);
    TResult Result();
}

我需要有可能从{zero,append}签名创建Builders。像这样:

interface X<TSource, TResult>
{
    TResult Zero { get; }
    TResult Append(TResult a, TSource b);
}

我为新情况实施了下一个BuilderMakerFor:

class BuilderMakerFor<TSource, TResult>
{
    public IBuilderFor<TSource, TResult> MakeFrom(X<TSource, TResult> x)
    {
        return new Product(x);
    }

    class Product
        : IBuilderFor<TSource, TResult>
    {
        readonly X<TSource, TResult> _x;
        TResult _result;

        public Product(
            X<TSource, TResult> x)
        {
            _x = x;
            _result = _x.Zero;
        }

        public IBuilderFor<TSource, TResult> Append(TSource value)
        {
            _result = _x.Append(_result, value);
            return this;
        }

        public TResult Result()
        {
            return _result;
        }
    }
}

一切都很好,除了一点:我不知道如何命名X.

zero : α
append : α -> α -> α

名称是Monoid。

什么是

zero : α
append : α -> β -> α

名字?

1 个答案:

答案 0 :(得分:0)

长期没有回答。我认为签名

zero : α
append : α -> β -> α

在数学方面没有名字。

我将其命名为AggregatingSource或FoldingSource。