类型不匹配

时间:2017-04-27 13:14:19

标签: scala scala-cats

我有以下功能定义:

def addMonoid[A](items: List[A])(implicit monoid: Monoid[A]) =
  items.foldLeft(monoid.empty)((a, b) => monoid.combine(a, b))

当我尝试使用它时如下:

add(List(Some(1), Some(2), Some(3)))

我有:

Error:(35, 15) type mismatch;
 found   : Some[Int]
 required: Int
add(List(Some(1), Some(2), Some(3)));}
         ^

有什么问题?

2 个答案:

答案 0 :(得分:3)

由于定义了Monoid[Option],而不是Monoid[Some],因此猫没有找到隐含的范围。如果您使用some语法提供的{cat}提供Option[A],这将起作用:

def addMonoid[A: Monoid](items: List[A]) =
  items.foldLeft(Monoid[A].empty)((a, b) => Monoid[A].combine(a, b))

addMonoid(List(1.some, 2.some, 3.some)).foreach(println)

产量

6

答案 1 :(得分:1)

你也可以直接在猫中使用Monoid

import cats._
import cats.implicits._
Monoid[Option[Int]].combineAll(List(Some(1), Some(2), Some(3)))