为什么 Scalaz(和 Cats)到处都使用大写的变量

Tob*_*oby 6 scala scalaz scala-cats

对于(缩减)示例,

class SemigroupOps[F] (val self: F)(val F: Semigroup[F]) extends Ops[F] {
  def |+|(other: => F): F = F.append(self, other)
}
Run Code Online (Sandbox Code Playgroud)

F在这种情况下是一个变量,所以我希望f在类似 Java 的库中看到它。

为什么 Scalaz 使用大写约定?这是一个haskell约定吗?

为什么?

为了获得额外的功绩,其背后的动机是什么?到目前为止,它比帮助更令人困惑,但我知道我错过了约定背后的原因。