【发布时间】:2016-11-29 19:35:17
【问题描述】:
折叠到列表时无法让 foldLeft 在 HList 上工作,当我将 Hlist 折叠到字符串时一切正常。
object wrapInList extends Poly1 {
implicit def intCase = at[Int]{v => List(v)}
implicit def stringCase = at[String]{v => List(v)}
}
object mergeToString extends Poly1 {
implicit def intCase = at[Int](_.toString())
implicit def stringCase = at[String](identity)
}
object foldListPoly extends Poly2 {
implicit def foldToList[T](implicit st: wrapInList.Case.Aux[T, List[T]]) =
at[List[T], T]{ (acc, t) => acc ::: wrapInList(t) }
implicit def foldToString[T](implicit st: mergeToString.Case.Aux[T, String]) =
at[String, T]{ (acc, t) => acc + mergeToString(t)}
}
val hList = "aoeu" :: 42 :: HNil
val foldedHlist = hList.foldLeft("")(foldListPoly)
val foldedHList2 = hList.foldLeft(Nil)(foldListPoly)
编译 foldedHList2 时出错
could not find implicit value for parameter folder:
shapeless.ops.hlist.LeftFolder[shapeless.::[String,shapeless.::[Int,shapeless.HNil]],scala.collection.immutable.Nil.type,com.test.Test.foldListPoly.type]
【问题讨论】:
-
能补充一下错误吗?
-
我用编译错误更新了问题。