Hlistを折り畳んでリストを折りたたむときにHListをfoldLeftにすることはできません。シェイプレス:foldLeft on 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)
Erorr問題は、あなたがhList
(42の次の要素と互換性がありませんwrapInList
で "aoeu" のList[String]
を生成することこれは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]
エラーを追加できますか? –
私はコンパイルエラーの質問を更新しました。 – andresrcom