zig*_*tar 5 scala implicit typeclass
我有一个特质Outer与成员F是一个类型构造.我想提供类型类实例F,但不知何故,在某一点上隐式解决方案scalac停止工作.
我尝试构建一个较小的最小示例,但我必须添加下面的所有内容才能显示错误.注意倒数第二行仍在编译,正确地从嵌套的伴随对象中拾取隐含的行sub.
但是最后一行不再编译了.另请注意,在倒数第二行中指定隐式方法时,它会进行编译.
任何人都可以提供为什么会发生这种情况的线索?
trait TC[F[_]]
trait Outer[N[_]] {
trait F[_]
object F {
implicit val tcInst: TC[F] = new TC[F]{}
}
}
case class Sub[N[_]]() extends Outer[N]
object Test{
implicit val optionInst: TC[Option] = new TC[Option]{}
val sub = Sub[Option]()
val sub2 = Sub[sub.F]()
implicitly[TC[sub.F]] //compiles
implicitly[TC[sub2.F]](sub2.F.tcInst) //compiles
implicitly[TC[sub2.F]] //doesn't compile
}
Run Code Online (Sandbox Code Playgroud)
最后一行产生以下错误:
Error:(22, 13) could not find implicit value for parameter e: test.novariance.TC[test.novariance.Test.sub2.F]
implicitly[TC[sub2.F]] //doesn't compile
^
Error:(22, 13) not enough arguments for method implicitly: (implicit e: test.novariance.TC[test.novariance.Test.sub2.F])test.novariance.TC[test.novariance.Test.sub2.F].
Unspecified value parameter e.
implicitly[TC[sub2.F]] //doesn't compile
^
Run Code Online (Sandbox Code Playgroud)
我可以明白为什么你的隐式无法解析,所以我将尝试解释为什么它不满足范围规则。
但我不清楚你的意图是什么,所以我无法建议解决方法。
一步步:
implicitly[TC[sub2.F]])的同伴(如果有)TCsub2.F.typeFOuter)。TC[Option],它与 不是同一类型 sub2.F.type。TC没有伴生对象。sub2.F不是一个类,它是一个对象,因此它不能有伴生对象。如果您想引用F其中的特征Outer,则需要类型投影运算符#,例如sub2#F
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |