scala – 如何选择乘法monoid而不是添加monoid?
发布时间:2020-12-16 09:58:10 所属栏目:安全 来源:网络整理
导读:我想合并两个列表: 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中这样做的惯用
我想合并两个列表:
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中这样做的惯用方法是什么? 解决方法
您可以使用乘法标记来指示您要使用乘法monoid:
import scalaz.Tags.Multiplication val xs = List(1,3).map(Multiplication(_)) val ys = List(4,7).map(Multiplication(_)) 然后: scala> xs merge ys res0: List[scalaz.@@[Int,scalaz.Tags.Multiplication]] = List(4,10,18,7) Multiplication.unwrap删除标记. 您还可以显式传入您自己的实例: scala> List(1,7))(Monoid.instance(_ * _,1)) res1: List[Int] = List(4,7) 但是,使用标签更为惯用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |