Monoid [String]真的是scala中的Monoid

时间:2015-10-05 14:56:31

标签: scala category-theory monoids

我目前正在学习scala中的范畴理论和相关性法则

  

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

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

("Foo" + "Bar") + "Test" == "Foo" + ("Bar" + "Test") // true

在这种情况下,顺序并不重要。但是如果只有两个值呢?如果数字仍然有效(可交换),但在使用字符串做同样的事情时它会失败。

3+1==1+3 // True
("Foo" + "Bar") == ("Bar" + "Foo") // Not commuative

那么说相关性需要交流来满足幺半群法则是合法的吗?那么String Monoid是否有效?

1 个答案:

答案 0 :(得分:4)

  

那么说关联性需要交换性来实现幺半群法则是合法的吗?

没有。二元运算不需要是可交换的可交换的。 ("Foo" + "Bar") == ("Bar" + "Foo")为假的事实与+String.

相关联的事实无关
  

无论如何,String Monoid是否有效?

是的,您可以拥有Monoid[String]

根据定义:

  

monoid是在关联二元操作+下关闭的集合,在I中具有标识元素S,以便{{1}中的所有a我是S

     

monoid必须包含至少一个元素。

+ a = a + I = a成为+的二元运算。对于任何两个字符串Monoid[String]ab也是a + b,因此二进制操作在String类型上关闭。如果没有严格的证据,我们也知道它是相关的。

即。对于所有字符串Stringab

c

我们还有一个标识元素(a + b) + c == a + (b + c) (空字符串),因为对于任何字符串""aa + "" == a

其二进制运算也是可交换的monoid称为可交换的monoid 。并且您显然无法使用"" + a == a操作为String提供可交换的幺半群。