问题标签 [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 回答
536 浏览

haskell - 为什么 Alternative 类型类需要是 Control.Applicative 的子类

Haskell 提供了一个标准类型类“Alternative”,它有效地<|>为任何类型的应用程序提供了操作符。

据我了解,Alternative 被认为是 Applicative 上的 Monoid,但是该<|>运算符似乎在许多不是 Applicative Functors 的类型中也完全有意义,并且不需要对 Applicative 类型类有任何特定依赖它才能正常工作。

为什么 Alternative 需要成为 Applicative 的子类是否有原因,如果是这样,是否有标准类型类来定义非应用类型的类似功能?

0 投票
0 回答
96 浏览

xml - 如何在 Scala 中使用 monoid 检查 XML?

假设我需要验证输入 XML,例如

我需要确保它的根元素具有 label"a"和子元素,分别带有label "a1"、和texts和。"a2""a3""a1a1a1""a2a2a2"""

我可以定义基本的验证功能如下:

因为Status是一个幺半群(与列表同构),那么Validate[A]也是一个幺半群,我们可以用|+|

是否有意义 ?您将如何修复/改进它?

0 投票
0 回答
137 浏览

scala - 如何从 ADT 创建通用 Monoid

鉴于我有一个现有的 ADT,是否可以创建一个通用的 monoid。

从现在开始,我的 ADT 中有与类一样多的类,但它不是 DRY。

这是代码:

我想要类似的东西,但由于一些重复,我发现这段代码很难看:

0 投票
1 回答
197 浏览

haskell - 对于类型对齐的序列,我如何用 foldMap 来表达 foldr?

我在玩类型对齐的序列,特别是我在弄乱折叠它们的想法。一个可折叠的类型对齐序列看起来像这样:

它很容易实现foldrTAfoldMapTA首先使用foldMapTA以天真的方式将序列转换为类型对齐列表(即,使用类型对齐列表类别),然后折叠该列表。不幸的是,这可能非常低效,因为长列表可能会附加到短列表之前。我一直在尝试找出一种方法来使用类似于用于Data.Foldable更有效地定义左右折叠的技巧,但是这些类型让我头晕目眩。Endo似乎不够通用,无法做到这一点,而且我在其他方向上采取的每一步都会导致我获得更多的类型变量,而我无法跟踪。

0 投票
1 回答
103 浏览

haskell - 折叠函数 - 幺半群

为什么列表长度上方的折叠不是幺半群?

length = foldr (\_ n -> 1+n) 0

它不是关联的并且具有中性元素0,因此它应该是一个幺半群吗?

0 投票
1 回答
324 浏览

haskell - 我们可以用 Alternative 做什么,但不能用 Monoid 做什么?

我读了为什么是 MonadPlus 而不是 Monad + Monoid?我理解理论上的区别,但我无法弄清楚实际的区别,因为对于 List 它看起来是一样的。

是的。也许有不同的实现

但是我们可以像 Alternative 一样实现 Maybe Monoid

那么,有人可以展示解释Alternative和Monoid之间实际区别的代码示例吗?

这个问题不是为什么 MonadPlus 而不是 Monad + Monoid 的重复?

0 投票
3 回答
361 浏览

haskell - 我对幺半群的理解有效吗?

所以,我现在正在学习 Haskell,我想确认或揭穿我对 monoid 的理解。

我从阅读CIS194课程中了解到,monoid 基本上是用于在自定义集上定义自定义二进制操作的“API”。

比起我去告诉自己更多信息,我偶然发现了大量非常令人困惑的教程试图澄清这件事,所以我不再那么确定了。

我有不错的数学背景,但我只是被所有的隐喻弄糊涂了,我正在寻找明确的是/否答案来回答我对幺半群的理解。

0 投票
1 回答
177 浏览

postgresql - Algebird HyperLogLog - 寄存器索引和寄存器值位

我是 HyperLogLog 和 Scala 的新手,我正在尝试使用 Twitter Algebird 的 HyperLogLog 实现 - https://github.com/twitter/algebird/blob/develop/algebird-core/src/main/scala/com/twitter/algebird /HyperLogLog.scala

在 HyperLogLog 的其他实现中(例如 Postgres https://github.com/aggregateknowledge/postgresql-hll的这个),我可以使用存储桶的数量(使用 log2m)以及基于寄存器的宽度来调整算法关于我预期的肉欲和准确性要求。

我无法理解这些值是如何在 Algebird 实现中使用/计算的。具体来说,我正在使用该HyperLogLogMonoid课程。

0 投票
1 回答
1500 浏览

list - 将列表添加到 Haskell 中的列表列表

如何将列表添加到列表列表中?假设我要添加itemzbagList,这是一个列表列表。我怎样才能做到这一点?

0 投票
1 回答
1018 浏览

haskell - 为什么 Kleisli 不是 Monoid 的一个实例?

如果您希望附加两个 (a -> mb) 类型的函数,以便只获得一个附加两个结果的相同类型的函数,则可以使用 Kleisli 来执行此操作:

但是,目前没有在 中定义这样的实例Control.Arrow。通常,在 Haskell 中,我怀疑有一个很好的理由,但找不到哪一个。

笔记

这个问题与这个问题很相似。但是,对于 Monoid,我看不到定义实例的方法,例如:

因为已经有一个实例: