Где реализован неявный Monoid[Int] и т. д.

Я пытаюсь немного выучить/понять scalaz. Для этого я начал с примера :

List(3, 4, 5).asMA.foldMap(x => x)
 => 12 //(3+4+5) 

def foldMap[B](f: A => B)(implicit r: Foldable[M], m: Monoid[B])

. Итак, где-то должен быть Foldable[List[_]] и Monoid[Int] (с append = + и zero = 0 ). Но я не смог найти эти два имплицита. Есть ли простой способ найти их?

Следующий пример был:

List(3, 4, 5).asMA.foldMap(multiplication)
 => 60 //(3*4*5)

Тут я еще больше запутался. Я предположил, что умножение должно быть заменено Monoid[Int] на единицу с append = *, ноль = 1. Но тогда f :A=>B отсутствует. И если я буду следовать умножению, я не найду ничего, связанного с моноидом или функцией и т. д.

sealed trait IntMultiplication extends NewType[Int]

trait NewType[X] {
  val value: X
  override def toString = value.toString
}
9
задан Fabian 1 May 2012 в 07:42
поделиться