Scala 理解半群。函数式编程。斯卡拉

Scala 理解半群。函数式编程。斯卡拉,scala,functional-programming,scalaz,scala-cats,Scala,Functional Programming,Scalaz,Scala Cats,阅读和理解半群的代数很容易。但对于命令式语言背景下的软件开发人员来说,这仍然是一个模糊的概念。不幸的是,我的研究更多的是关于指针而不是抽象代数,所以现在我的大脑几乎被命令式思维所感染。。。问题是我知道这个定义,但我不明白。我在哪里、何时以及为什么要创建/提供/使用半群还不太清楚 由于一般定义(…半群可以将事物组合在一起…)没有很好地解释用法,请您以问题解决方案的形式提供真实世界的示例 在回答中,请尽可能包括以下方面: 使用追加/合并功能 合成半群 定义应用什么:应用[λ[α=>F]函数 (这些

阅读和理解半群的代数很容易。但对于命令式语言背景下的软件开发人员来说,这仍然是一个模糊的概念。不幸的是,我的研究更多的是关于指针而不是抽象代数,所以现在我的大脑几乎被命令式思维所感染。。。问题是我知道这个定义,但我不明白。我在哪里、何时以及为什么要创建/提供/使用半群还不太清楚

由于一般定义(…半群可以将事物组合在一起…)没有很好地解释用法,请您以问题解决方案的形式提供真实世界的示例

在回答中,请尽可能包括以下方面:
  • 使用
    追加
    /
    合并
    功能
  • 合成半群
  • 定义应用什么:应用[λ[α=>F]函数
  • (这些来自spire math——一个猫依赖的图书馆)hek是什么
    • AdditiveSemigroup[A]
    • 乘法半群[A]
    • emigroup[A]
    • AdditiveCommutativeSemigroup[A]
    • multiplativeCommutativeSemiGroup[A]
    • 带[A]
      -这是幂等半群
  • 上面提到的是什么用途
  • 您使用哪些依赖于半群的函数/组合子(可能是
    def[A:semigroup)(A:A)形式的函数)…
    因此他们将
    半群看作类型类并使用它的行为)
  • 你们知道什么样的半群,它们在上述函数的上下文中是如何行为的
  • [其他我无法提及的方面,因为我不理解该主题]
欢迎所有(部分)答案!:)

scalaz和cats的半群性状的合并片段:

trait Semigroup[F]  { self =>

  def append(f1: F, f2: => F): F //scalaz
  def combine(x: A, y: A): A     //equivalent of `append` in cats

  // derived functions

  def multiply1(value: F, n: Int): F   //scalaz
  def compose: Compose[λ[(α, β) => F]] //scalaz
  def apply: Apply[λ[α => F]] //scalaz; `λ[α => F]` is the same as `({type λ[α] = α => F})#λ`
  def combineN(a: A, n: Int): A   //cats
  def combineAllOption: Option[A] //cats


  /** Lawes of semigroup - from scalaz:
   * A semigroup in type F must satisfy two laws:
    *
    *  - '''closure''': `∀ a, b in F, append(a, b)` is also in `F`. This is enforced by the type system.
    *  - '''associativity''': `∀ a, b, c` in `F`, the equation `append(append(a, b), c) = append(a, append(b , c))` holds.
   */
}