Бесформенное отображение HList
Я попробую
import shapeless._
val ilist = List(1,2,3) ;
val slist = List("a", "b", "c") ;
(ilist :: slist :: HNil).map(list: List[_] => list -> list.length)
и компилятор говорит, что ему нужен тип аргумента в функции карты или он не может найти list
значение, когда тип List[_]
предоставлен. Есть ли простой пример картирования?
Нет такой проблемы с простыми списками Scala
val list1 = 1 :: 2 :: Nil; val list2 = 3 :: 4 :: Nil
(list1 :: list2 :: Nil) map {list => list -> list.length}
компилируется нормально.
1 ответ
Решение
Я не бесформенный эксперт, но я уверен, что вы можете сделать это с ~>>
, Дело в том, что map
принимает Poly
так что тебе нужна Poly
функция, которая возвращает константу. Это то, что ~>>
является.
import shapeless._
import poly._
val ilist = List(1,2,3) ;
val slist = List("a", "b", "c") ;
object fun extends (List ~>> Int) {
override def apply[T](f: List[T]): Int = f.size
}
println((ilist :: slist :: HNil).map(fun))
Обратите внимание, что ~>>
на самом деле:
type ~>>[F[_], R] = ~>[F, Const[R]#λ]