我想将函数从隐式转换A => B
为List[A] => List[B]
.
我写了以下隐式定义:
implicit def lift[A, B](f: A => B): List[A] => List[B] = ...
不幸的是,当我编写以下代码时,未应用隐式:
val plusOne: (List[Int]) => List[Int] = (x: Int) => (x + 1)
如果我用明确的时间注释函数,它工作正常。
为什么?我该如何解决?
更新。似乎该问题特定于匿名函数。相比:
@Test
def localLiftingGenerics {
implicit def anyPairToList[X, Y](x: (X, Y)): List[X] => List[Y] = throw new UnsupportedOperationException
val v: List[String] => List[Int] = ("abc", 239)
}
@Test
def localLiftingFuns {
implicit def fun2ListFun[X, Y](f: X => Y): List[X] => List[Y] = throw new UnsupportedOperationException
val v: List[String] => List[Int] = ((x: String) => x.length)
}
第一个编译得很好。第二个被标记为错误