簡體   English   中英

如何選擇乘法幺半群而不是添加幺半群?

[英]How to choose multiplication monoid instead of addition monoid?

我想合並兩個列表:

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)

這隱含地使用標准加法monoid。 如果我想使用乘法幺半群怎么辦? 在Scalaz中這樣做的慣用方法是什么?

您可以使用Multiplication標記來指示您要使用乘法monoid:

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)

但是,使用標簽更為慣用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM