问题标签 [monoids]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
365 浏览

scala - 如何在 Scala 中“求和”幺半群值流?

假设我正在使用Rng库进行简单的蒙特卡罗模拟(如那篇文章中所述)。

现在我需要总结所有项目tests

我可以这样做,fold但我想使用一些“快捷方式”(smth. like sum: Seq[M[A]] => M[A],其中 M 是一个幺半群),而不是。scala有或scalaz有这样的功能吗?

0 投票
1 回答
1864 浏览

haskell - 在haskell中读取行直到非空字符串

我正在尝试从 Haskell 中的输入中读取行,直到找到非空行。实际上,我知道如何简单地使用以下代码来做到这一点:

测试(我输入了两个空行,然后是“foo”):

但是,为了锻炼,我试图使用 Monoids(http://learnyouahaskell.com/functors-applicative-functors-and-monoids#monoids)来实现这一点,试图模仿 First/getFirst Monoids(见链接) .

我首先在满足我需要的列表上创建了一个 Monoid(连接只保留第一个参数):

它适用于无限的字符串列表(由于懒惰):

但是,我无法让它在 IO Monad 中工作。我尝试了以下方法:

哪个具有正确的类型:

然而,Haskell 一直想在将整个列表交给mconcat...之前评估整个列表。有没有办法在 Monoid/Monad 范围内导航时保持懒惰?

0 投票
1 回答
194 浏览

sml - 如何在标准 ML 中表示多态列表幺半群

我最近在使用标准 ML 中的幺半群。签名很容易写:

简单的幺半群也是如此,例如整数加法幺半群:

但是我被困在为更高种类的类型定义一个幺半群,例如list. 当然,这不会编译:

经过一番搜索,我找到了以下基于仿函数的解决方案:

我的问题是是否存在声明通用列表幺半群的替代方法,理想情况下不需要functor声明。当试图声明一个列表幺半群时,显然没有必要知道列表的包含类型。

0 投票
1 回答
87 浏览

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

我有 Monoid 和 Builder 接口:

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

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

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

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

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

名字叫 Monoid。

什么是

姓名?

0 投票
1 回答
481 浏览

haskell - 为什么'Control.Applicative.Const'没有'Alternative'实例

有一个仿函数Monoid a => Monoid (Const a b)的实例Const来自Control.Applicative。还有一个例子Monoid m => Applicative (Const m)

因此,我希望还有一个Monoid m => Alternative (Const m)与 for 相一致的实例Monoid。这只是一个应该修复的遗漏,还是有更深层次的原因?

0 投票
2 回答
138 浏览

haskell - foldMap 采用错误类型的参数?

以下是 Learn You a Haskell 中的一些示例:

测试它:

of的第一个参数F.foldable是一个返回Monoid的函数,但是Num不是Monoid的子类,所以(+)在这里肯定是不合格的吧?但从测试来看,它似乎很合适。

这里z有点神秘,它应该是一个 Monoid,但具体是什么?

0 投票
1 回答
226 浏览

haskell - 为什么 Haskell 的仿函数上没有幺半群的类型类?

我承认这个问题有点不具体,但我想知道为什么我从来没有在 Haskell 的仿函数上偶然发现一个类型类。我是否只是错过了它,这种缺席是否有充分的理由,还是完全是由于历史原因?恕我直言,下面的继承图看起来有点奇怪,没有右上角:

0 投票
1 回答
387 浏览

scala - Scalaz `Tag.apply`:它是如何工作的?

嗨,我正在学习 Advanced Scala 书,但我在理解 scalaz 源代码中的这段代码时遇到了一些麻烦:

它如何工作?a.asInstanceOf[A @@ T]应该因 ClassCastException 而失败,不是吗?

一个使用示例是:

在这种情况下a是 Int 如何将其转换为@@[Int, Multiplication]( Tagged[Int, Multiplication])

谢谢您的帮助。

0 投票
1 回答
181 浏览

xml - 箭头一次添加一个元素

这个问题是关于 HXT 的,但我想它通常适用于概念 ArrowPlus。考虑以下程序:

你能告诉我会保存test.xml什么吗?我的期望:

我的逻辑:箭头bar复制其所有输入并添加一个“条”元素(this是标识箭头的别名):

因此,结果bar >>> bar >>> bar应该是三个 'bar' 元素(请注意,这eelem "bar" >>> eelem "bar"只会产生一个 'bar' 元素,因为箭头mkelem家族忽略了它们的输入(尽管它仍然可以用来生成它们的内容)并且只输出新创建的元素) .

说了这么多,我介绍test.xml一下程序执行后的内容:

问题:

  1. 是什么<//>

  2. 为什么有 7 个“条形”元素而不是 3 个?这种重复的原因是什么?

  3. 为什么当我替换bar >>> bar >>> barnone >>> bar >>> bar >>> bar我得到:

none零箭头在哪里。我们在这里处理箭头上的幺半群,对吧? none(≡ zeroArrow) 应该是它的标识,所以它应该是这样的: none <+> eelem "bar"它产生一个 'bar' 元素,随后的调用应该添加另外两个元素。但是我们什么都没有!

  1. 如何编写bar一次添加一个“条形”元素的正确版本的箭头?

很抱歉问了 4 个问题,但我想它们是密切相关的,所以应该不是问题。

0 投票
1 回答
207 浏览

haskell - 如何为我的类型制作 Monoid 实例?

我有以下类型:

另外,我有一个功能:

我可以将此功能用于mappend.

我不明白,在我的情况下如何实现 Monoid 接口。