我想合并两份名单:
import scalaz.syntax.align._
import scalaz.std.list._
import scalaz.std.anyVal._
List(1, 2, 3).merge(List(4, 5, 6, 7)) // Evaluates to List(5, 7, 9, 7)这将隐式地使用标准加法单半群。如果我想用乘法幺半群代替呢?用Scalaz做这件事的惯用方法是什么?
发布于 2014-10-22 09:11:39
您可以使用Multiplication标记来指示要使用乘法幺半群:
import scalaz.Tags.Multiplication
val xs = List(1, 2, 3).map(Multiplication(_))
val ys = List(4, 5, 6, 7).map(Multiplication(_))然后:
scala> xs merge ys
res0: List[scalaz.@@[Int,scalaz.Tags.Multiplication]] = List(4, 10, 18, 7)Multiplication.unwrap移除标记。
您还可以显式传递您自己的实例:
scala> List(1, 2, 3).merge(List(4, 5, 6, 7))(Monoid.instance(_ * _, 1))
res1: List[Int] = List(4, 10, 18, 7)不过,使用标记更有习性。
https://stackoverflow.com/questions/26503385
复制相似问题