Scala 无形HList映射

Scala 无形HList映射,scala,shapeless,hlist,Scala,Shapeless,Hlist,我试着 编译器说它需要map函数中的参数类型,或者在提供typelist[\u]时找不到list值。有一个简单的映射示例吗 普通Scala列表没有这样的问题 import shapeless._ val ilist = List(1,2,3) ; val slist = List("a", "b", "c") ; (ilist :: slist :: HNil).map(list: List[_] => list -> list.length) 编译很好。我是一个不变形的专家,

我试着

编译器说它需要map函数中的参数类型,或者在提供type
list[\u]
时找不到
list
值。有一个简单的映射示例吗

普通Scala列表没有这样的问题

import shapeless._
val ilist = List(1,2,3) ; 
val slist = List("a", "b", "c") ; 
(ilist :: slist :: HNil).map(list: List[_] => list -> list.length)

编译很好。

我是一个不变形的专家,但我相信你可以用
~>
做到这一点。问题是
map
接受
Poly
,因此需要一个返回常量的
Poly
函数。这就是
~>>
的含义

    val list1 = 1 :: 2 :: Nil; val list2 = 3 :: 4 :: Nil
    (list1 :: list2 :: Nil) map {list => list -> list.length}
注意,
~>>
实际上是:

  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))

如果我想映射
HList[String->F[\u]]
,该怎么办?无辜的转换
fun(List~>>Int)=>fun((String->List)~>>Int)
被编译器拒绝。@Valentithomirov不确定我是否正确理解了您的意思,但您应该扩展
PolyN
,以获得更复杂的场景。请参见段落末尾,其中定义了
对象大小
type ~>>[F[_], R] = ~>[F, Const[R]#λ]