給定一個無形的HList,其中每個列表元素共享相同的類型構造函數,HList如何排序?測序一個HList
例如:
def some[A](a: A): Option[A] = Some(a)
def none[A]: Option[A] = None
val x = some(1) :: some("test") :: some(true) :: HNil
val y = sequence(x) // should be some(1 :: "test" :: true :: HNil)
def sequence[L <: HList : *->*[Option]#λ, M <: HList](l: L): Option[M] =
???
我試圖執行這樣的序列:
object optionFolder extends Poly2 {
implicit def caseOptionValueHList[A, B <: HList] = at[Option[A], Option[B]] { (a, b) =>
for { aa <- a; bb <- b } yield aa :: bb
}
}
def sequence[L <: HList : *->*[Option]#λ, M <: HList](l: L): Option[M] = {
l.foldRight(some(HNil))(optionFolder)
}
但是,這並不編譯:在實施本作無論是
could not find implicit value for parameter folder: shapeless.RightFolder[L,Option[shapeless.HNil.type],SequencingHList.optionFolder.type]
任何提示像Option這樣的特定示例還是適用於任意應用程序?
謝謝!我試着在提交之前提供隱含的RightFolder,但遇到了上面指出的確切錯誤(需要'F [M]'但是找到'folder.Out')。 RightFolderAux明確表示。 – mpilquist 2013-04-21 15:05:34
我剛剛嘗試了無形狀2.0的序列實現並得到此錯誤:錯誤:(41,36)無法找到參數文件夾的隱式值:shapeless.ops.hlist.RightFolder [L,Option [shapeless.HNil],optionFolder。類型] l.foldRight(Option(HNil:HNil))(optionFolder) ^ – 2014-04-18 22:58:12
@ChanningWalton:在那之前是否有錯誤?你有沒有導入'shapeless.ops.hlist.RightFolder'?它在2.0.0中適用於我。 – 2014-04-19 03:25:13