В следующем коде:Является ли предоставление явной контекстной границы возможной в Scala?
def sum[A: Monoid](xs: List[A]): A = {
val m = implicitly[Monoid[A]]
xs.foldLeft(m.mzero)(m.mappend)
}
Если у меня уже есть в моей области, к Monoid[Int]
, который имеет mappend = _ + _
, я могу назвать мою функцию с явным Monoid[Int]
, которая имеет различное поведение? Или единственным решением является использование более подробного синтаксиса со вторым аргументом implicit monoid: Monoid[Int]
?
Код Exemple приходит от этого Scalaz урока: http://eed3si9n.com/learning-scalaz/sum+function.html
В конце автор показывает Exemple предоставления явно Моноид, но он не использовал контекстные рамки:
scala> val multiMonoid: Monoid[Int] = new Monoid[Int] {
def mappend(a: Int, b: Int): Int = a * b
def mzero: Int = 1
}
multiMonoid: Monoid[Int] = [email protected]
scala> sum(List(1, 2, 3, 4))(multiMonoid)
res14: Int = 24