Ты сделаешь
import shapeless._ ; import poly._
object fun extends (List ~>> (List, Int)) {
override def apply[T](list: List[T]): (List, Int) = list -> list.size
}
println((List(1,2,3) :: List("a", "b", "c") :: HNil).map(fun))
чтобы сопоставить каждый подсписок с парой. Однако что, если элементы HList более сложные, как, например, кортежи? Естественная попытка
object fun extends ((String -> List) ~>> (List, Int)) {
override def apply[T](list: (String -> List[T])): (List, Int) = list -> list.size
отклоняется компилятором. Что вы делаете? Где этому научиться?