学习Scalaz的sum函数是什么类型A?

时间:2014-04-08 10:54:22

标签: scala scalaz

Learning Scalaz中,方法总和上有一个类型参数。

这是否意味着A类型是Monoid类型?然而,这似乎是错误的,如果类型A是Monoid,那么它如何也是一个整数,因为它在示例中使用。我必须读错类型参数。

类型参数的含义是什么?我该怎么读?

def sum[A: Monoid](xs: List[A]): A = {
     val m = implicitly[Monoid[A]]
     xs.foldLeft(m.mzero)(m.mappend)
   }

1 个答案:

答案 0 :(得分:1)

A: Monoid是一个Context Bound的类型参数。这是语法糖。

以下内容:

def sum[A: Monoid](xs: List[A]): A

变得卑鄙:

def sum[A](xs: List[A])(implicit val $ev: Monoid[A]): A