在下面的代码中,我试图创建一个 HList 列表,但我在此代码的最后一行遇到编译时错误:
◾找不到参数 tupler 的隐式值:shapeless.ops.hlist.Tupler[shapeless.HList] . 未指定的值参数元组。
object Problem extends App {
def combinations[T](n: Int, ls: List[T]) = {
import shapeless._
import HList._
def prepareHListR(t: Int, result: HList): HList = t match {
case t if (t == 0) => result
case _ => prepareHListR(t - 1, rotateLeft(t - 1, ls) :: result)
}
prepareHListR(n, HNil)
}
def rotateLeft[A](i: Int, xs: List[A]) = {
val rot = if (i > 0) i else xs.length + i
xs.drop(rot) ++ xs.take(rot)
}
println(combinations(3, List('a, 'b, 'c, 'd, 'e, 'f)))
}
输出:
列表('a,'b,'c,'d,'e,'f)::列表('b,'c,'d,'e,'f,'a)::列表('c,' d, 'e, 'f, 'a, 'b) :: HNil
接下来我需要做的是创建这些列表的元组,如下所示:
(列表('a,'b,'c,'d,'e,'f),列表('b,'c,'d,'e,'f,'a),列表('c,'d , 'e, 'f, 'a, 'b))
我正在尝试:
combinations(3, List('a, 'b, 'c, 'd, 'e, 'f)).tupled
然而,这种方法在 REPL 上运行良好:
scala> import shapeless._
import shapeless._
scala> import HList._
import HList._
scala> val hlist = List(1, 2, 3) :: List(4, 5, 6) :: List(7, 8, 9) :: HNil
hlist: shapeless.::[List[Int],shapeless.::[List[Int],shapeless.::[List[Int],shapeless.HNil]]] = List(1, 2, 3) :: List(4, 5, 6) :: List(7, 8, 9) :: HNil
scala> val t =hlist.tupled
t: (List[Int], List[Int], List[Int]) = (List(1, 2, 3),List(4, 5, 6),List(7, 8, 9))
对我来说,这似乎是类型参数的问题,但由于我对 Scala 和 Shapeless 的了解有限,我无法理解它。
任何帮助深表感谢!TIA。