我正在尝试使用shapeless从两个HList中选择“非空”值:
import shapeless.{ HNil, Poly2}
object choose extends Poly2 {
implicit def caseInt =
at[Int,Int]{
case (_,n) if n > 0 => n
case (o,_) => o
}
implicit def caseString =
at[String,String] {
case (_,n) if n.nonEmpty => n
case(o,_) => o
}
}
val g = "a" :: "" :: 0 :: HNil
val h = "" :: "a" :: 5 :: HNil
g.zip(h).map(choose)
我在缺少隐式映射器时遇到了错误。 如果我理解正确,我需要证明zip的结果是可映射的,但我不确定如何做到这一点。