加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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)

但是,使用标签更为惯用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读