【发布时间】:2016-04-18 17:14:19
【问题描述】:
由于某种原因,以下无法正常工作
object NtExtTest {
implicit class NaturalTransformExt[M[_], N[_]](val self: NaturalTransformation[M,N]) extends AnyVal {
def test(b:Boolean) = b
}
}
当我在自然变换上调用方法 test 时。 Intellij 将其识别为扩展函数,但编译给出 value test is not a member of cats.~> 。使用 scalaz NaturalTransformation 时也会发生同样的情况。我可以做些什么来帮助编译器识别扩展名吗?
Scala 版本是 2.11.8
一个失败的例子:
import NtExtTest._
class NtTest[B] extends NaturalTransformation[Either[B,?], Xor[B,?]] {
def apply[A](fa: Either[B, A]): Xor[B, A] = {
fa match {
case Left(l) => Xor.left(l)
case Right(r) => Xor.right(r)
}
}
}
val test = new NtTest[String]
test.test(false)
(上面使用了种类投影仪插件,但对于 lambdas 类型或单参数更高种类的类型同样失败)
【问题讨论】:
-
产生该错误的实际代码是什么?
-
隐式类应该在另一个对象/特征/类中。尝试将您的
NaturalTransformExt类包装在一个对象中(例如Foo)并在调用import Foo._之前说test.test(false)docs.scala-lang.org/overviews/core/implicit-classes.html -
@smoes 抱歉只是假设给定的,相应地更改了代码
-
那么,产生了什么错误?
-
值测试不是NtTest的成员
标签: scala scalaz scala-cats kind-projector