Scala Cats文档:Monoid [Pair [A,B]]

时间:2018-08-23 20:11:14

标签: scala scala-cats

我离开Scala已有好几年了(一开始从未真正适应它),而是使用对我来说更容易学习和使用的语言。

我现在回来并重新学习它,并尝试一些可用的库。我最近开始研究Cats,但是在文档的早期却与某些内容相抵触,这让我感到困惑,并且想知道我是否(再次)错过了该语言的一些基本知识。

page describing typeclasses上,我们看到以下内容:

  

要获得另一个激励性的差异,请考虑简单配对类型。

final case class Pair[A, B](first: A, second: B)
  

定义Monoid[Pair[A, B]]取决于定义Monoid[A]Monoid[B]的能力,这里的定义是点对的。

首先,我不知道作者所说的“定义是逐点的”。

第二,我不知道为什么定义Monoid[Pair[A, B]]一定要依赖于定义Monoid[A]Monoid[B](并且从不解释)。在Monoid特性中似乎没有任何需要的东西。

1 个答案:

答案 0 :(得分:2)

这基本上与Scala或任何编程语言无关。作者仅使用monoid作为一个(大概是众所周知的)示例来演示框架的某些功能。

对于Cats文档的普通读者会有点喜欢monoid的假设并不太牵强,因为:

完整的句子是

  

定义Monoid[Pair[A, B]]取决于定义Monoid[A]Monoid[B]的能力,这里的定义是点对的。

此句子以monoids为例,以演示有关类型类的内容。它可能想说的是:

  

(A, op_A, 1_A)(B, op_B, 1_B)是两个类半体。然后,笛卡尔积A x B也可以自然地赋以Monoid结构,如下所示:

                     1_{AxB} := (1_A, 1_B)
  (a1, b1) op_{AxB} (a2, b2) := (a1 op_A a2, b1 op_B b2)

句子中的定义为“ pointwise”。我认为“ componentwise一词会更合适。 Wikipedia article uses "pairwise"出于任何原因。在这里,我更喜欢“逐分量”而不是“逐点”和“成对”。