Como posso usar Shapeless para criar uma função abstraindo sobre arity
Vamos considerar um exemplo específico. Eu tenho muitas funções que recebem um número variável de argumentos e retornam umSeq[T]
. Dizer:
def nonNeg(start: Int, count: Int): Seq[Int] =
Iterator.from(start).take(count).toSeq
Para cada uma dessas funções, preciso criar uma "versão Java" dessa função, retornar umjava.util.List[T]
. Eu posso criar a "versão Java" da função acima com:
def javaNonNeg(start: Int, count: Int): java.util.List[Int] =
nonNeg(start, count).asJava
Isso é um pouco detalhado, pois a lista de parâmetros é duplicada duas vezes. Em vez disso, gostaria de criar uma função de nível superior que tome como parâmetro uma função da forma denonNeg
(qualquer número e tipo de argumento, retorna umSeq[T]
) e retorna uma função que aceita os mesmos argumentos, mas retorna umjava.util.List[T]
. Supondo que essa função foi chamadamakeJava
, Então eu seria capaz de escrever:
def javaNonNeg = makeJava(nonNeg)
podemakeJava
ser escrito usandoSem forma capacidade paraabstraindo sobre a aridade? Se pode, como, e não, por que e como mais isso pode ser feito?