问题标签 [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.
language-agnostic - 编程中的幺半群/半群示例
众所周知,幺半群在编程中无处不在。它们无处不在,非常有用,以至于我作为一个“爱好项目”,正在开发一个完全基于它们的属性(分布式数据聚合)的系统。为了使系统有用,我需要有用的幺半群:)
我已经知道这些:
- 数值或矩阵求和
- 数值或矩阵乘积
- 具有顶部或底部元素的总订单下的最小值或最大值(更一般地,在有界格中加入或相遇,或者更一般地,产品或副产品在一个类别中)
- 设置联合
- 使用 monoid 连接冲突值的映射联合
- 有限集的子集的交集(或者如果我们谈论半群,则只是集的交集)
- 地图与有界关键域的交集(此处相同)
- 排序序列的合并,可能在不同的幺半群/半群中加入键相等的值
- 排序列表的有界合并(同上,但我们取结果的前 N 个)
- 两个幺半群或半群的笛卡尔积
- 列表连接
- 内同构组合。
现在,让我们将操作的准属性定义为符合等价关系的属性。例如,如果我们认为等长的列表或具有相同内容直到置换的列表是等价的,则列表连接是准交换的。
下面是一些准幺半群和准交换幺半群和半群:
- 任意(a+b = a 或 b,如果我们认为载体集合的所有元素都是等价的)
- 任何令人满意的谓词(a+b = a 和 b 中的一个非空且满足某个谓词 P,如果没有满足则为空;如果我们认为所有满足 P 的元素等价)
- 随机样本的有界混合(xs+ys = xs 和 ys 串联的大小为 N 的随机样本;如果我们认为与整个数据集具有相同分布的任意两个样本是等价的)
- 加权随机样本的有界混合
- 让我们称之为“拓扑合并”:给定两个非循环且不矛盾的依赖关系图,一个包含两者中指定的所有依赖关系的图。例如,列表“连接”可能会产生任何排列,其中每个列表的元素按顺序排列(例如,123+456=142356)。
还有哪些其他存在?
haskell - monads Writer m 和 Either e 是绝对对偶的吗?
Writer m
我注意到和Either e
单子之间存在双重关系。如果 m 是一个幺半群,那么
可用于形成一个单子:
() 的对偶是 Void(空类型),积的对偶是联积。每个类型 e 都可以被赋予“comonoid”结构:
以明显的方式。现在,
这就是Either e
单子。箭头遵循完全相同的模式。
问题:是否可以编写一个通用代码来执行 asEither e
和 asWriter m
取决于给定的幺半群?
haskell - 单子只是内函子类别中的一个幺半群,有什么问题?
下面是谁先说的?
单子只是内函子类别中的一个幺半群,有什么问题?
在不太重要的一点上,这是真的吗?如果是这样,您能否给出解释(希望没有太多 Haskell 经验的人可以理解)?
haskell - 在 Haskell 中使用 Maybe 写一个最大 Monoid
我一直在研究Haskell 幺半群及其用途,这让我对幺半群的基础有了相当好的理解。博客文章中介绍的其中一件事是 Any monoid,它的用法如下:
同样,我一直在尝试构建一个最大幺半群,并提出了以下内容:
我可以为特定类型构造一个最大幺半群——例如,很容易说 Num,但希望它对任何东西都有用(显然要求任何东西都是 Ord 的实例)。
此时我的代码可以编译,但仅此而已。如果我尝试运行它,我会得到:
我不确定这是因为我说错了,还是因为我的幺半群不正确,或者两者兼而有之。我很感激任何关于我哪里出错的指导(在逻辑错误和非惯用的 Haskell 用法方面,因为我对这种语言非常陌生)。
- 编辑 -
Paul Johnson 在下面的评论中建议将 Maybe 排除在外。我的第一次尝试如下所示:
但我不清楚如何表达 mempty 而不知道 a 的 mempty 值应该是什么。我怎么能概括这个?
haskell - 有“单元”类吗?会有用吗?
是否存在具有单个单位值的类型的类(不确定此处的正确术语),即具有某些预定义值的类型?
...适用于所有 Monoids、MonadPlus 等。
我想这个类的另一个名字可能是Default
. 这对我来说最近两次有用。
可能没有说服力的例子:
这存在吗?其他人认为它可能有用吗?
haskell - 在实践中使用单子、幺半群、函子和箭头
我最近遇到了这篇关于函数式编程不同方面的有用资源的帖子,例如 monads 和 monoids 等。
但问题是——普通程序员可以从这些概念中得到什么用处。我经常遇到关于这些问题的“学术”研究。但是,我在实践中(在实际项目中)从未遇到过使用它们的人。
所以问题是 - Haskell 中是否有任何广泛使用的开源项目真正利用了这些东西,这些项目证明了这个概念在“生产”软件中的实际必要性,而不是在编写的“学术”软件中”纯娱乐”。制作这样的列表会很酷:
- Monads - 用于 A 和 B 等项目,否则这样的代码看起来会复杂得多。
- 对幺半群也是如此。
- 函子也是如此。
- 箭也是一样。
scala - Scala PartialFunction 可以是 Monoid 吗?
我认为PartialFunction可以是Monoid。我的思维过程正确吗?例如,
但当前版本的 Scalaz(6.0.4) 不包括在内。有什么不包括在内的原因吗?
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?
scala - Scala中的monoid与monad
我最近试图找到一个关于 monads 和 monoids 之间区别的好资料。
有人可以提供一个链接到一个很好的资源,或者花点时间来详细说明相似之处/不同之处?
haskell - 类型类 MonadPlus、Alternative 和 Monoid 之间的区别?
标准库 Haskell 类型类MonadPlus
、Alternative
和Monoid
每个都提供了两个具有基本相同语义的方法:
- 空值:
mzero
、empty
或mempty
。 a -> a -> a
将类型类中的值连接在一起的运算符:mplus
、<|>
或mappend
。
这三个都指定了实例应遵守的这些法律:
因此,似乎这三个类型类都提供了相同的方法。
(Alternative
也提供some
and many
,但它们的默认定义通常就足够了,因此就这个问题而言,它们并不太重要。)
所以,我的疑问是:为什么有这三个极其相似的类?除了它们不同的超类约束之外,它们之间是否有任何真正的区别?