You can use the Multiplication tag to indicate that you want to use the multiplication monoid:
import scalaz.Tags.Multiplication val xs = List(1, 2, 3).map(Multiplication(_)) val ys = List(4, 5, 6, 7).map(Multiplication(_))
And then:
scala> xs merge ys res0: List[ scalaz.@ @[Int,scalaz.Tags.Multiplication]] = List(4, 10, 18, 7)
Multiplication.unwrap removes the tag.
You can also explicitly pass your instance:
scala> List(1, 2, 3).merge(List(4, 5, 6, 7))(Monoid.instance(_ * _, 1)) res1: List[Int] = List(4, 10, 18, 7)
Using tags is more idiomatic.
source share