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

scala – 如何使用Name作为应用程序?

发布时间:2020-12-16 09:52:36 所属栏目:安全 来源:网络整理
导读:scala val a = Need(20)a: scalaz.Name[Int] = scalaz.Name$$anon$2@173f990scala val b = Need(3)b: scalaz.Name[Int] = scalaz.Name$$anon$2@35201fscala for(a0 - a; b0 - b) yield a0 + b0res90: scalaz.Name[Int] = scalaz.Name$$anon$2@16f7209scala (
scala> val a = Need(20)
a: scalaz.Name[Int] = scalaz.Name$$anon$2@173f990

scala> val b = Need(3)
b: scalaz.Name[Int] = scalaz.Name$$anon$2@35201f

scala> for(a0 <- a; b0 <- b) yield a0 + b0
res90: scalaz.Name[Int] = scalaz.Name$$anon$2@16f7209

scala> (a |@| b)
res91: scalaz.ApplicativeBuilder[scalaz.Name,Int,Int] = scalaz.ApplicativeBuilde
r@11219ec

scala> (a |@| b) { _ + _ }
<console>:19: error: ambiguous implicit values:
 both method FunctorBindApply in class ApplyLow of type [Z[_]](implicit t: scala
z.Functor[Z],implicit b: scalaz.Bind[Z])scalaz.Apply[Z]
 and value nameMonad in object Name of type => scalaz.Monad[scalaz.Name]
 match expected type scalaz.Apply[scalaz.Name]
       (a |@| b) { _ + _ }
                 ^

名字是Monad,因此也是一个适用者.为什么这段代码不起作用呢?我是否需要添加任何类型的注释才能使其正常工作?谢谢!

解决方法

只是部分答案,我对scalaz不太熟悉. (a | @ | b)是ApplicativeBuilder [Name,Int].你的apply(加号:(Int,Int)=> Int)调用需要两个隐式参数,一个Functor [Name]和一个Apply [Name](比Applicative少一点,没有pure).

第二个有问题.由于Name出现在Apply [Name]类型中,伴随对象Name被认为是隐式作用域,因此隐式val nameMonad:Monad [Name]位于隐式作用域中.由于Monad扩展了Applicative,它扩展了Apply,因此它可能是隐含参数的候选者.

但是当Apply在Apply [Name]中显示其伴随对象Apply时,也考虑了伴随对象Apply.在它的祖先ApplyLow中,有一个

implicit def FunctorBindApply[Z[_]](implicit t: Functor[Z],b: Bind[Z]): Apply[Z]

Functor [Name]和Bind [Name]的实例存在于隐式作用域中(nameMonad都是它们),因此FunctorBindApply也提供候选Apply(其行为与nameMonad完全相同,因为它完全基于它,但它是另一个然而,候选人).

我不认为我真的了解优先权规则.在ApplyLow中定义而不是Apply会降低相对于随附对象Apply中定义的内容的优先级.但不相对于无关对象名称中定义的内容.我不认为Monad是Apply的子类型,因为它更具体.我认为没有其他规则可以在两者之间作出决定,但我必须承认我在那里有点不知所措.编译器错误消息肯定同意它可以在备选方案之间进行选择.

不确定正确的解决方案应该是什么,但是将nameMonad直接放在范围内,例如使用import Name._应该优先考虑.

(编辑:李大同)

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

    推荐文章
      热点阅读