问题标签 [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.
haskell - 为什么 Alternative 类型类需要是 Control.Applicative 的子类
Haskell 提供了一个标准类型类“Alternative”,它有效地<|>
为任何类型的应用程序提供了操作符。
据我了解,Alternative 被认为是 Applicative 上的 Monoid,但是该<|>
运算符似乎在许多不是 Applicative Functors 的类型中也完全有意义,并且不需要对 Applicative 类型类有任何特定依赖它才能正常工作。
为什么 Alternative 需要成为 Applicative 的子类是否有原因,如果是这样,是否有标准类型类来定义非应用类型的类似功能?
xml - 如何在 Scala 中使用 monoid 检查 XML?
假设我需要验证输入 XML,例如
我需要确保它的根元素具有 label"a"
和子元素,分别带有label "a1"
、和texts和。"a2"
"a3"
"a1a1a1"
"a2a2a2"
""
我可以定义基本的验证功能如下:
因为Status
是一个幺半群(与列表同构),那么Validate[A]
也是一个幺半群,我们可以用|+|
是否有意义 ?您将如何修复/改进它?
scala - 如何从 ADT 创建通用 Monoid
鉴于我有一个现有的 ADT,是否可以创建一个通用的 monoid。
从现在开始,我的 ADT 中有与类一样多的类,但它不是 DRY。
这是代码:
我想要类似的东西,但由于一些重复,我发现这段代码很难看:
haskell - 对于类型对齐的序列,我如何用 foldMap 来表达 foldr?
我在玩类型对齐的序列,特别是我在弄乱折叠它们的想法。一个可折叠的类型对齐序列看起来像这样:
它很容易实现foldrTA
,foldMapTA
首先使用foldMapTA
以天真的方式将序列转换为类型对齐列表(即,使用类型对齐列表类别),然后折叠该列表。不幸的是,这可能非常低效,因为长列表可能会附加到短列表之前。我一直在尝试找出一种方法来使用类似于用于Data.Foldable
更有效地定义左右折叠的技巧,但是这些类型让我头晕目眩。Endo
似乎不够通用,无法做到这一点,而且我在其他方向上采取的每一步都会导致我获得更多的类型变量,而我无法跟踪。
haskell - 折叠函数 - 幺半群
为什么列表长度上方的折叠不是幺半群?
length = foldr (\_ n -> 1+n) 0
它不是关联的并且具有中性元素0
,因此它应该是一个幺半群吗?
haskell - 我们可以用 Alternative 做什么,但不能用 Monoid 做什么?
我读了为什么是 MonadPlus 而不是 Monad + Monoid?我理解理论上的区别,但我无法弄清楚实际的区别,因为对于 List 它看起来是一样的。
是的。也许有不同的实现
但是我们可以像 Alternative 一样实现 Maybe Monoid
那么,有人可以展示解释Alternative和Monoid之间实际区别的代码示例吗?
haskell - 我对幺半群的理解有效吗?
所以,我现在正在学习 Haskell,我想确认或揭穿我对 monoid 的理解。
我从阅读CIS194课程中了解到,monoid 基本上是用于在自定义集上定义自定义二进制操作的“API”。
比起我去告诉自己更多信息,我偶然发现了大量非常令人困惑的教程试图澄清这件事,所以我不再那么确定了。
我有不错的数学背景,但我只是被所有的隐喻弄糊涂了,我正在寻找明确的是/否答案来回答我对幺半群的理解。
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
课程。
list - 将列表添加到 Haskell 中的列表列表
如何将列表添加到列表列表中?假设我要添加itemz
到bagList
,这是一个列表列表。我怎样才能做到这一点?
haskell - 为什么 Kleisli 不是 Monoid 的一个实例?
如果您希望附加两个 (a -> mb) 类型的函数,以便只获得一个附加两个结果的相同类型的函数,则可以使用 Kleisli 来执行此操作:
但是,目前没有在 中定义这样的实例Control.Arrow
。通常,在 Haskell 中,我怀疑有一个很好的理由,但找不到哪一个。
笔记
这个问题与这个问题很相似。但是,对于 Monoid,我看不到定义实例的方法,例如:
因为已经有一个实例: