¿Cómo puedo usar Shapeless para crear una función que abstraiga sobre arity?
Consideremos un ejemplo específico. Tengo muchas funciones que toman un número variable de argumentos y devuelven unSeq[T]
. Decir:
def nonNeg(start: Int, count: Int): Seq[Int] =
Iterator.from(start).take(count).toSeq
Para cada una de esas funciones, necesito crear una "versión Java" de esa función, devuelve unjava.util.List[T]
. Puedo crear la "versión Java" de la función anterior con:
def javaNonNeg(start: Int, count: Int): java.util.List[Int] =
nonNeg(start, count).asJava
Esto es algo detallado, ya que la lista de parámetros se duplica dos veces. En cambio, me gustaría crear una función de nivel superior que tome como parámetro una función de la forma denonNeg
(cualquier número y tipo de argumentos, devuelve unSeq[T]
) y devuelve una función que toma los mismos argumentos, pero devuelve unjava.util.List[T]
. Suponiendo que esa función se llamaramakeJava
, Entonces podría escribir:
def javaNonNeg = makeJava(nonNeg)
latamakeJava
ser escrito usandoInforme habilidad paraabstrayendo sobre arity? Si puede, cómo y no, ¿por qué y cómo se puede hacer esto?