Следующий код является типичной демонстрацией одного из вариантов использования shapeless:
def getHList[P <: Product, F, L <: HList](p: P)(implicit gen: Generic.Aux[P, L]): L = {
gen.to(p)
}
val v = getHList(1, 2, 3, 4, 5, 6, 7, 8, 9)
Это дает правильный результат, к сожалению, он полагается на синтаксический suger кортежа scala и не работает, когда число аргументов> 22:
val v = getHList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
(this generates an error that looks this the follow)
[Error] /xxx/HListSuite.scala:41: 29 more arguments than can be applied to method getHList: (p: P)(implicit gen: shapeless.Generic.Aux[P,L])L
one error found
FAILURE: Build failed with an exception.
Интересно, есть ли макрос или другая функция scala, которую я могу использовать, чтобы обойти это ограничение, какой-нибудь совет?
Я использую scala 2.12.8, но могу обновиться до 2.13 в любое время.