gpt4 book ai didi

scala - 在 Set 但不是 List 上使用 scalaz 的 MA 方法时出现编译问题

转载 作者:行者123 更新时间:2023-12-02 08:58:57 25 4
gpt4 key购买 nike

以下内容使用 scala Beta1 和 scalaz snapshot 5.0 编译得很好:

val p1: Int => Boolean = (i : Int) => i > 4

val s: List[Int] = List(1, 2, 3)
val b1 = s ∃ p1

然而这并没有:

val s: Set[Int] = Set(1, 2, 3)
val b1 = s ∃ p1

我收到以下错误:

Found: Int => Boolean
Required: Boolean => Boolean

方法的签名是:

def ∃(p: A => Boolean)(implicit r: FoldRight[M]): Boolean = any(p)

并且范围内应该有一个隐式的SetFoldRight。方法完全相同:ε: - 发生了什么?

最佳答案

看起来 MA[M[_],A] 中的 ASetBoolean >。在 Scalaz object ,有以下隐式:

implicit def Function1ApplyMA[A, R](f: A => R): MA[PartialApply1Of2[Function1, A]#Apply, R] = ma[PartialApply1Of2[Function1, A]#Apply, R](f)

现在我不完全理解这里的类型是怎么回事,但看起来 MA[M[_],A] 中的 AFunction1 的返回类型。 Set[A] 扩展了 A => Boolean,因此为什么 定义中的 A 被推断为 bool 值

一个解决方法是使用显式 ma 方法将 Set 转换为 MA,而不是让隐式函数完成繁重的工作:

val s = ma(Set(1, 2, 3))

关于scala - 在 Set 但不是 List 上使用 scalaz 的 MA 方法时出现编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2682487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com