Как я могу использовать 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
быть написано с использованиембесформенный способность кабстрагируясь над арити? Если это возможно, то как, а что нет, почему и как еще это можно сделать?