次のコードでは:
def sum[A: Monoid](xs: List[A]): A = {
val m = implicitly[Monoid[A]]
xs.foldLeft(m.mzero)(m.mappend)
}
スコープ内に が既にある場合、別の動作をする明示的に関数を呼び出すことはできMonoid[Int]
ますか? または、唯一の解決策は、2 番目の引数でより冗長な構文を使用することですか?mappend = _ + _
Monoid[Int]
implicit monoid: Monoid[Int]
コード例は、この Scalaz チュートリアルからのものです: http://eed3si9n.com/learning-scalaz/sum+function.html
最後に、著者はモノイドを明示的に提供する例を示しますが、コンテキスト境界は使用しませんでした:
scala> val multiMonoid: Monoid[Int] = new Monoid[Int] {
def mappend(a: Int, b: Int): Int = a * b
def mzero: Int = 1
}
multiMonoid: Monoid[Int] = $anon$1@48655fb6
scala> sum(List(1, 2, 3, 4))(multiMonoid)
res14: Int = 24