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

scala - Monoid[String] 真的是 Scala 中的 Monoid

我目前正在学习 scala 中的类别理论,并且结合律说

(x + y) + z = x + (y + z)

当使用两个以上的值时,这很好

在这种情况下,顺序无关紧要。但是,如果只有两个值怎么办。如果对于数字它仍然有效(可交换)但是当对字符串做同样的事情时它会失败。

那么说关联性需要交换性来满足幺半群定律是否合法?那么 String Monoid 仍然有效吗?

0 投票
1 回答
81 浏览

generics - 获取或实现 String.Zero 和 bool.Zero 一般用于幺半群

我正在尝试将一些现有代码重构为更单一的方法。现有代码包含接口IXInterface和数字,例如intbool。默认情况下,数字已经具有Zero,接口将其作为属性获取器,但boolstring没有。一种方法是将 bool 和 string 包装在一个接口中,但这很麻烦。

我想如果 F# 语言能够扩展数字类型,也许我也可以针对我的特定情况对字符串和布尔值进行扩展。

上面的编译很好,只要我不尝试将它与字符串或布尔值一起使用:

错误是明确和正确的(我有一个扩展方法,由于明显的原因无法识别),我只是不知道一种非侵入性的方法来摆脱它:

失败并显示“类型 bool 不支持运算符 'get_Zero'
失败并显示”类型字符串不支持运算符 'get_Zero'

0 投票
2 回答
213 浏览

haskell - Const Monoid 的应用实现

我不明白如何定义<*>类型检查。

左侧受Applicative 定义中f的签名约束<*>

将名称更改为当前情况后:

=> f :: m -> *

左侧f是 的 [first] 参数mappend

从 Monoid 的定义

将名称更改为当前情况后:

=> f :: m

0 投票
1 回答
29 浏览

scala - scalaz的简单聚合?

这是我对简单聚合的实现。

使用 scalaz 是否有更智能的实现?

0 投票
1 回答
70 浏览

haskell - 查找元素索引的通用方法

基础库发生了一些重大变化,所以我想知道今天的惯用解决方案是否会涉及fmap, Maybe, Monoid, First,Foldable以及其他类。

我想我需要fold一个Monoid带有zip [1..]、、和的复杂结构First,但找不到将这些东西组合在一起的明显方法。a -> BoolMaybe

另外,我怀疑大部分代码都在库中。我只是不确定我是否需要(或多少个)newtype包装器来组合类来获得我需要的结构。

0 投票
2 回答
130 浏览

monads - Monad:为什么身份很重要,如果一个系列中没有这样的特殊成员会发生什么?

我正在尝试学习 的概念monad,我正在观看这个出色的视频Brian Beckend 试图解释什么是 monad。

当他谈到 时monoid,它是一个类型的集合,它有一个组合规则,这个组合必须遵守 2 个规则:

  1. 联想: x @ (y @ z ) = (x @ y) @ z
  2. 集合中的特殊成员:x @ id = x and id @ x = x

我正在使用@代表作文的符号。id指特殊成员。

第二点是我想要理解的。为什么这很重要?如果没有这样的特殊成员怎么办?

当我学习新概念时,我总是试图将这些抽象的概念与其他一些具体的事物联系起来,这样我才能充分理解和背诵它们。

所以我想要联系monad和关注monoid的是lego。因此,乐高套装中的所有积木构成了一个集合。组合规则是将它们组合成新形状的积木。很明显,组合遵循第一条规则:联想。但是没有特殊的积木可以与其他积木组合并得到相同的回报。所以它不遵守第二条规则。

但是乐高仍然是高度可组合的。当乐高不遵守第二条规则时,遗漏了什么?后果是什么?
或者这样说,与其他monoid遵守所有这些规则的人相比。其他有什么功能monoid而乐高没有?

0 投票
1 回答
102 浏览

clojure - Clojure 猫追加 nil 行为

我正在使用funcool/cats,将 monoid 附加到以下代码:

nil将其视为可能/无的理由是什么?

注:版本为[funcool/cats "1.2.1"]

0 投票
1 回答
66 浏览

haskell - mempty 的定义不同,具体取决于 mempty 是左参数还是右参数?

我有以下数据类型和半组实例:

我想为上述类型制作一个幺半群实例,但我不知道该怎么做。如果我使用以下定义

它适用于所有输入对<>,除了我mappend

这将评估为mempty.

我该如何解决这个问题以使其mempty有效?似乎没有一些新的语法或概念就无法完成,因为它取决于 mempty 是在左边还是右边......

0 投票
3 回答
91 浏览

haskell - monoidal mappend 的自动传播

假设我有一个幺半群定义如下:

由于totalQuantityorderTotal都是数字,它们还在(+)下形成了一个幺半群。 有什么方法可以定义

所以,我可以只在每个字段上传播mappend调用,而不必手动定义类似

0 投票
1 回答
60 浏览

algorithm - 计算幺半群/半群的所有中缀积

简介:一组中缀产品

假设我有一个小组

和元素列表

如果我们的目标是实现一个功能

这样

(我们不关心如果i>会发生什么j

然后我们可以通过预先计算一个前缀表来做到这一点

1右侧表示 的单位G),然后实现f

这有效,因为

所以

经过充分的重新关联。

我的问题

如果 G 只是一个幺半群,而不是一个群,我们能否挽救这个想法,或者做一些不那么糟糕的事情?

对于我的特殊问题,如果我们可以做类似G = ([0, 1] ⊂ ℝ, *)的事情,即我们有来自单位行的实数,我们不能除以0?