我可以编写一个简单的递归多态函数:
object simpleRec extends Poly1 {
implicit def caseInt = at[Int](identity)
implicit def caseList[A, B](implicit ev: simpleRec.Case.Aux[A, B]) =
at[List[A]](_.headOption.map(simpleRec))
}
这似乎很大程度上符合我的要求;但是,我似乎得到了一个荒谬的结果类型:
scala> simpleRec(List.empty[List[Int]])
res3: Option[B] = None
scala> simpleRec(List(List(1)))
res4: Option[B] = Some(Some(1))
我如何才能让这个价值为Option[Option[Int]]
而不是Option[B]
?我希望我在这里犯了一些愚蠢的错误,但无法弄清楚它是什么。
答案 0 :(得分:2)
这可能是一个错误,以下代码按预期工作:
object simpleRec extends Poly1 {
implicit def caseInt = at[Int](identity)
implicit def caseList[A](implicit ev: simpleRec.Case[A]) =
at[List[A]](_.headOption.map(simpleRec))
}
使用shapeless_2.11-2.0.0