在Scala中的函数式编程一书中,我看到了以下签名:
def productMonoid[A,B](A: Monoid[A], B: Monoid[B]): Monoid[(A,B)]说明中说:
if types A and B are monoids, then the tuple type (A, B) is also a monoid我很难理解以下部分:
A: Monoid[A]A是作为类型参数的Monoid类型的?怎么理解?
发布于 2013-10-03 08:14:46
这里:A: Monoid[A]只是一个变量名,它也可以写成a: Monoid[A]或param1: Monoid[A]。给出这样的变量名有点惯例,例如,在大多数情况下,函子的变量名是F- F: Function[A],M表示Monad - M: Monad[A]。
abstract class SomeClass[TC[_], A](param: TC[A]) {
implicit val M: Monad[TC]
... // other code
}如果您看到类似于M.point[TC]的东西,其中M是Monad的一个实例,它就更加可读性和清晰。
添加了
而且A: Monoid[A]根本不是一个类型注释。类型参数写在方括号中:
productMonoid A,B (params.),所以在这个变体中:
def productMonoid[A: Monoid,B](params...)是的,Monoid[A]是A类型的类型类,它被分解为:
def productMonoid[A,B](params...)(implicit val $ev: Monoid[A])这意味着Monoid是一个类型构造函数,它接受类型A并为$ev构造类型Monoid[A]。
https://stackoverflow.com/questions/19153863
复制相似问题