Я пытаюсь немного выучить/понять 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
}