Предположим, вы хотите иметь в Scala что-то вроде шаблонов переменных (возможность определения n параметров типа для универсального класса).
Например, вы не хотите определять Tuple2[+T1, +T2] и Tuple3[+T1, +T2, +T3], но Tuple[T*].
Tuple2[+T1, +T2]
Tuple3[+T1, +T2, +T3]
Tuple[T*]
Существуют ли другие варианты, кроме HLists , которые поддерживают Tuple, Product и Function?
На данный момент в Scala нет синтаксической конструкции, которая бы позволяла предлагать то, что вы предлагаете. По этой же причине существует 22 класса Tuple (Tuple2, Tuple3, ..., Tuple22), а также различные классы Function (Function0, ...).