我有以下功能定义:
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)));}
^
有什么问题?
答案 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)))