我可以写一个简单的递归多态函数:
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]
?我希望我在这里犯了一些愚蠢的错误,但无法弄清楚它是什么。