Бесформенное отображение 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]#λ]
Другие вопросы по тегам