Как я могу использовать Shapeless, чтобы создать функцию, абстрагирующуюся над арностью

Давайте рассмотрим конкретный пример. У меня есть много функций, которые принимают переменное количество аргументов и возвращаютSeq[T], Сказать:

def nonNeg(start: Int, count: Int): Seq[Int] = 
    Iterator.from(start).take(count).toSeq

Для каждой из этих функций мне нужно создать «Java-версию» этой функции, возвращаетjava.util.List[T], Я могу создать «версию Java» вышеупомянутой функции с помощью:

def javaNonNeg(start: Int, count: Int): java.util.List[Int] =
    nonNeg(start, count).asJava

Это несколько многословно, так как список параметров дублируется дважды. Вместо этого я хотел бы создать функцию более высокого уровня, которая принимает в качестве параметра функцию видаnonNeg (любое число и тип аргументов, возвращаетSeq[T]) и возвращает функцию, которая принимает те же аргументы, но возвращаетjava.util.List[T], Предполагая, что функция была вызванаmakeJavaЯ бы тогда смог написать:

def javaNonNeg = makeJava(nonNeg)

МожноmakeJava быть написано с использованиембесформенный способность кабстрагируясь над арити? Если это возможно, то как, а что нет, почему и как еще это можно сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос