我看了scalaz 教程。
从此链接,我了解以下代码:
scala> def sum[A](xs: List[A])(implicit m: Monoid[A]): A = xs.foldLeft(m.mzero)(m.mappend)
sum: [A](xs: List[A])(implicit m: Monoid[A])A
scala> implicit val intMonoid = IntMonoid
intMonoid: IntMonoid.type = IntMonoid$@3387dfac
scala> sum(List(1, 2, 3, 4))
res9: Int = 10
但我不明白以下代码:
scala> def sum[A: Monoid](xs: List[A]): A = {
val m = implicitly[Monoid[A]]
xs.foldLeft(m.mzero)(m.mappend)
}
sum: [A](xs: List[A])(implicit evidence$1: Monoid[A])A
scala> sum(List(1, 2, 3, 4))
res10: Int = 10
如果我们考虑List(1, 2, 3, 4)
,A
是一个Int
。
那么我们如何才能拥有A
一个Monoid
和A
一个Int
indef sum[A: Monoid](xs: List[A]): A = {
呢?
谢谢