Как "суммировать" поток моноидных значений в Scala?

Предположим, я использую библиотеку Rng для простого моделирования Монте-Карло (как в этом посте).

val d      : Rng[Double] = double
val point  : Rng[(Double, Double)] = pair(d, d)
val points = point.stream(1000)
val tests  = points.map(point => if (insideCircle(point)) 1.0 else 0.0)

Теперь мне нужно сложить все пункты tests

tests[0] |+| tests[1] |+| tests[2] ... // Rng[Double] is a monoid

Я могу сделать это с fold но я хотел бы использовать некоторые "ярлыки" (что-то вроде sum: Seq[M[A]] => M[A]где М - моноид), а не. Делать scala или же scalaz есть такая функция?

1 ответ

Решение

Скалаз имеет различные операции, например suml при условии, что есть Foldable экземпляр класса типов для Stream,

Другие вопросы по тегам