问题标签 [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 投票
4 回答
3390 浏览

language-agnostic - 编程中的幺半群/半群示例

众所周知,幺半群在编程中无处不在。它们无处不在,非常有用,以至于我作为一个“爱好项目”,正在开发一个完全基于它们的属性(分布式数据聚合)的系统。为了使系统有用,我需要有用的幺半群:)

我已经知道这些:

  • 数值或矩阵求和
  • 数值或矩阵乘积
  • 具有顶部或底部元素的总订单下的最小值或最大值(更一般地,在有界格中加入或相遇,或者更一般地,产品或副产品在一个类别中)
  • 设置联合
  • 使用 monoid 连接冲突值的映射联合
  • 有限集的子集的交集(或者如果我们谈论半群,则只是集的交集)
  • 地图与有界关键域的交集(此处相同)
  • 排序序列的合并,可能在不同的幺半群/半群中加入键相等的值
  • 排序列表的有界合并(同上,但我们取结果的前 N ​​个)
  • 两个幺半群或半群的笛卡尔积
  • 列表连接
  • 内同构组合。

现在,让我们将操作的准属性定义为符合等价关系的属性。例如,如果我们认为等长的列表或具有相同内容直到置换的列表是等价的,则列表连接是准交换的。

下面是一些准幺半群和准交换幺半群和半群:

  • 任意(a+b = a 或 b,如果我们认为载体集合的所有元素都是等价的)
  • 任何令人满意的谓词(a+b = a 和 b 中的一个非空且满足某个谓词 P,如果没有满足则为空;如果我们认为所有满足 P 的元素等价)
  • 随机样本的有界混合(xs+ys = xs 和 ys 串联的大小为 N 的随机样本;如果我们认为与整个数据集具有相同分布的任意两个样本是等价的)
  • 加权随机样本的有界混合
  • 让我们称之为“拓扑合并”:给定两个非循环且不矛盾的依赖关系图,一个包含两者中指定的所有依赖关系的图。例如,列表“连接”可能会产生任何排列,其中每个列表的元素按顺序排列(例如,123+456=142356)。

还有哪些其他存在?

0 投票
3 回答
681 浏览

haskell - monads Writer m 和 Either e 是绝对对偶的吗?

Writer m我注意到和Either e单子之间存在双重关系。如果 m 是一个幺半群,那么

可用于形成一个单子:

() 的对偶是 Void(空类型),积的对偶是联积。每个类型 e 都可以被赋予“comonoid”结构:

以明显的方式。现在,

这就是Either e单子。箭头遵循完全相同的模式。

问题:是否可以编写一个通用代码来执行 asEither e和 asWriter m取决于给定的幺半群?

0 投票
5 回答
191646 浏览

haskell - 单子只是内函子类别中的一个幺半群,有什么问题?

下面是谁先说的?

单子只是内函子类别中的一个幺半群,有什么问题?

在不太重要的一点上,这是真的吗?如果是这样,您能否给出解释(希望没有太多 Haskell 经验的人可以理解)?

0 投票
1 回答
1561 浏览

haskell - 在 Haskell 中使用 Maybe 写一个最大 Monoid

我一直在研究Haskell 幺半群及其用途,这让我对幺半群的基础有了相当好的理解。博客文章中介绍的其中一件事是 Any monoid,它的用法如下:

同样,我一直在尝试构建一个最大幺半群,并提出了以下内容:

我可以为特定类型构造一个最大幺半群——例如,很容易说 Num,但希望它对任何东西都有用(显然要求任何东西都是 Ord 的实例)。

此时我的代码可以编译,但仅此而已。如果我尝试运行它,我会得到:

我不确定这是因为我说错了,还是因为我的幺半群不正确,或者两者兼而有之。我很感激任何关于我哪里出错的指导(在逻辑错误和非惯用的 Haskell 用法方面,因为我对这种语言非常陌生)。

- 编辑 -

Paul Johnson 在下面的评论中建议将 Maybe 排除在外。我的第一次尝试如下所示:

但我不清楚如何表达 mempty 而不知道 a 的 mempty 值应该是什么。我怎么能概括这个?

0 投票
3 回答
271 浏览

haskell - 有“单元”类吗?会有用吗?

是否存在具有单个单位值的类型的类(不确定此处的正确术语),即具有某些预定义的类型?

...适用于所有 Monoids、MonadPlus 等。

我想这个类的另一个名字可能是Default. 这对我来说最近两次有用。

可能没有说服力的例子:

这存在吗?其他人认为它可能有用吗?

0 投票
3 回答
1860 浏览

haskell - 在实践中使用单子、幺半群、函子和箭头

我最近遇到了这篇关于函数式编程不同方面的有用资源的帖子,例如 monads 和 monoids 等。

但问题是——普通程序员可以从这些概念中得到什么用处。我经常遇到关于这些问题的“学术”研究。但是,我在实践中(在实际项目中)从未遇到过使用它们的人。

所以问题是 - Haskell 中是否有任何广泛使用的开源项目真正利用了这些东西,这些项目证明了这个概念在“生产”软件中的实际必要性,而不是在编写的“学术”软件中”纯娱乐”。制作这样的列表会很酷:

  • Monads - 用于 A 和 B 等项目,否则这样的代码看起来会复杂得多。
  • 对幺半群也是如此。
  • 函子也是如此。
  • 箭也是一样。
0 投票
3 回答
1479 浏览

scala - Scala PartialFunction 可以是 Monoid 吗?

我认为PartialFunction可以是Monoid。我的思维过程正确吗?例如,

但当前版本的 Scalaz(6.0.4) 不包括在内。有什么不包括在内的原因吗?

0 投票
1 回答
644 浏览

scala - Group values by a key with any Monoid

I would like to write a method mergeKeys that groups the values in an Iterable[(K, V)] by the keys. For example, I could write:

However, I would like to be able to use any Monoid instead of writing a method for List. For example, the values may be integers and I want to sum them instead of appending them in a list. Or they may be tuples (String, Int) where I want to accumulate the strings in a set but add the integers. How can I write such a method? Or is there something else I can use in scalaz to get this done?

Update: I wasn't as far away as I thought. I got a little bit closer, but I still don't know how to make it work if the values are tuples. Do I need to write yet another implicit conversion? I.e., one implicit conversion for each number of type parameters?

0 投票
2 回答
13257 浏览

scala - Scala中的monoid与monad

我最近试图找到一个关于 monads 和 monoids 之间区别的好资料。

有人可以提供一个链接到一个很好的资源,或者花点时间来详细说明相似之处/不同之处?

0 投票
1 回答
6867 浏览

haskell - 类型类 MonadPlus、Alternative 和 Monoid 之间的区别?

标准库 Haskell 类型类MonadPlusAlternativeMonoid每个都提供了两个具有基本相同语义的方法:

  • 空值:mzeroemptymempty
  • a -> a -> a将类型类中的值连接在一起的运算符: mplus<|>mappend

这三个都指定了实例应遵守的这些法律:

因此,似乎这三个类型类都提供了相同的方法。

Alternative也提供someand many,但它们的默认定义通常就足够了,因此就这个问题而言,它们并不太重要。)

所以,我的疑问是:为什么有这三个极其相似的类?除了它们不同的超类约束之外,它们之间是否有任何真正的区别?