Quiero convertir implícitamente funciones de A => B
a List[A] => List[B]
.elevación implícita en scala
me escribió la siguiente definición implícita:
implicit def lift[A, B](f: A => B): List[A] => List[B] = ...
Por desgracia, cuando escribo el siguiente código, implícita no se aplican:
val plusOne: (List[Int]) => List[Int] = (x: Int) => (x + 1)
Si anoto la función con el tiempo explícito, funciona bien.
¿Por qué? ¿Cómo puedo arreglarlo?
ACTUALIZACIÓN. Parece que el problema es específico de las funciones anónimas. Compare:
@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)
}
El primero está compilado bien. El segundo está marcado como error
¿Puede proporcionar el código que utiliza para implementar la 'implicit def'? –
@ChrisJamesC Actualizado con un caso de prueba –
¿Estás seguro de que necesitas/quieres hacer esto? 'map' compra mucha claridad para algunos personajes, y p. 'val plusOne: (List [Int]) => List [Int] = _ map (_ + 1)' es realmente más corto que su versión. –